DDD 聚合验证
DDD Aggregates Validation
我正在构建一个将通过 RESTful 服务公开其部分功能的应用程序,我的应用程序包组织如下
- 应用程序 --> 此包包含 RESTfull 服务
- 模型 --> 包含聚合、值对象等领域模型...
- 基础结构 --> 包含访问数据库
所需的 类 组
- Mongo 数据库 --> 我的数据库
应用程序包公开端点
CastReview(UUID reviewedEntityId, string review)
从请求正文中检索到的审核是强制性的。
现在我的问题是应该在哪里进行验证
我是否应该将验证逻辑保留在聚合内部和应用程序内部?我只是构建聚合实例并检查聚合是否有效
或者我是否应该在应用程序包内以及聚合内进行验证
对于聚合,我不会将其称为验证,而是不变的执行,因为它们应该是 always valid。您不只是修改聚合然后让外部验证器检查它,聚合会强制执行它们自己的不变量。
有些规则显然是域不变量,因为您必须对聚合数据有深入的了解才能执行它们,而有些规则绝对是适用规则(例如电子邮件确认 == 电子邮件)。但有时界限是模糊的。我肯定会在客户端和应用级别检查评论是否为 null 或空,同时我不会考虑 Review
Aggregate OK 如果它有一个 null 评论,所以我会做两个都。但这可能取决于域和 YMMV。
完整性约束(或 "invariants",如果您更喜欢该术语)应在 (domain/design/data) 模型中定义。然后他们应该多次检查:
- 在前端用户界面中(输入/更改和提交)以获得响应式验证。
- 在后端应用程序或基础设施保存之前。
- 并且在 DBMS 中(提交前),如果您的数据库与其他应用程序共享。
我正在构建一个将通过 RESTful 服务公开其部分功能的应用程序,我的应用程序包组织如下
- 应用程序 --> 此包包含 RESTfull 服务
- 模型 --> 包含聚合、值对象等领域模型...
- 基础结构 --> 包含访问数据库 所需的 类 组
- Mongo 数据库 --> 我的数据库
应用程序包公开端点
CastReview(UUID reviewedEntityId, string review)
从请求正文中检索到的审核是强制性的。
现在我的问题是应该在哪里进行验证
我是否应该将验证逻辑保留在聚合内部和应用程序内部?我只是构建聚合实例并检查聚合是否有效
或者我是否应该在应用程序包内以及聚合内进行验证
对于聚合,我不会将其称为验证,而是不变的执行,因为它们应该是 always valid。您不只是修改聚合然后让外部验证器检查它,聚合会强制执行它们自己的不变量。
有些规则显然是域不变量,因为您必须对聚合数据有深入的了解才能执行它们,而有些规则绝对是适用规则(例如电子邮件确认 == 电子邮件)。但有时界限是模糊的。我肯定会在客户端和应用级别检查评论是否为 null 或空,同时我不会考虑 Review
Aggregate OK 如果它有一个 null 评论,所以我会做两个都。但这可能取决于域和 YMMV。
完整性约束(或 "invariants",如果您更喜欢该术语)应在 (domain/design/data) 模型中定义。然后他们应该多次检查:
- 在前端用户界面中(输入/更改和提交)以获得响应式验证。
- 在后端应用程序或基础设施保存之前。
- 并且在 DBMS 中(提交前),如果您的数据库与其他应用程序共享。