DDD汇总验证

时间:2015-01-26 10:47:49

标签: domain-driven-design

我正在构建一个应用程序,它将通过RESTful服务公开其部分功能,我的应用程序包的组织如下

  1. 申请 - >该软件包包含RESTfull服务
  2. 型号 - >包含聚合的域模型,值对象,......
  3. 基础设施 - >包含访问数据库所需的一组类
  4. Mongo DB - >我的数据库
  5. 应用程序包公开端点

    CastReview(UUID reviewedEntityId, string review)
    

    从请求正文中检索的审核,这是强制性的。

    现在我的问题是验证应该发生的地方

    1. 我应该将验证逻辑保留在聚合内部和应用程序内部,我只需构建聚合实例并检查聚合是否有效

    2. 或者我应该在应用程序包内部以及聚合内部进行验证

2 个答案:

答案 0 :(得分:3)

对于Aggregates,我不会将其称为验证但是执行不变,因为它们应该是always valid。您不仅可以修改聚合,然后通过外部验证器对其进行检查,聚合会强制执行自己的不变量。

一些规则显然是域不变量,因为您必须深入了解聚合数据以强制执行它们,并且一些规则肯定是应用规则(例如电子邮件确认==电子邮件)。但有时线条模糊不清。我肯定会在客户端和应用程序级别检查审核是否为空或空,同时我不会考虑Review聚合确定如果它有空审查,所以我会做两件事。但这可能是依赖于域的和YMMV。

答案 1 :(得分:1)

完整性约束(或#34;不变量",如果您更喜欢该术语)应在(域/设计/数据)模型中定义。然后应多次检查它们:

  1. 在前端用户界面(输入 /更改提交)中获取响应式验证。
  2. 在后端应用程序或基础架构保存之前
  3. 在DBMS(提交前)中,如果您的数据库与其他应用程序共享。
  4. 另见我的文章Integrity Constraints and Data Validation