【问题标题】:DDD Aggregates ValidationDDD 聚合验证
【发布时间】:2015-01-26 21:56:21
【问题描述】:

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

  1. 应用程序 --> 这个包包含 RESTfull 服务
  2. Model --> 包含域模型、聚合、值对象……
  3. Infrastructure --> 包含访问数据库所需的类集
  4. Mongo DB --> 我的 DB

应用程序包暴露端点

CastReview(UUID reviewedEntityId, string review)

从请求正文中检索到的审查是强制性的。

现在我的问题是验证应该在哪里进行

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

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

【问题讨论】:

    标签: domain-driven-design


    【解决方案1】:

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

    有些规则显然是域不变量,因为您必须对聚合数据有深入的了解才能强制执行它们,有些规则肯定是适用性规则(例如电子邮件确认 == 电子邮件)。但有时线条会模糊。我肯定会在客户端和应用程序级别检查评论是否为空或空,同时我不会考虑 Review Aggregate OK 如果它有一个空评论,所以我会两者兼而有之。但这可能取决于域和 YMMV。

    【讨论】:

      【解决方案2】:

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

      1. 在前端用户界面(输入/更改和提交)获得响应式验证。
      2. 在后端应用程序或基础架构中保存前
      3. 如果您的数据库与其他应用程序共享,则在 DBMS 中(提交前)。

      另见我的文章Integrity Constraints and Data Validation

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-03-07
        • 1970-01-01
        • 2017-05-25
        • 2016-03-21
        • 1970-01-01
        • 2011-02-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多