我是“使用 C# 的 DDD”世界的新手,我有一个关于在哪里确保某些验证规则的问题。例如,我的一个实体有一个闭包的概念,如果他的状态是 lock ,则不能更改其他属性。
放置此验证的最佳位置在哪里?将此规则带到应用层似乎不正确,仅禁止字段编辑和每个 setter 内部似乎违反了 DRY 原则。有什么建议吗?
我是“使用 C# 的 DDD”世界的新手,我有一个关于在哪里确保某些验证规则的问题。例如,我的一个实体有一个闭包的概念,如果他的状态是 lock ,则不能更改其他属性。
放置此验证的最佳位置在哪里?将此规则带到应用层似乎不正确,仅禁止字段编辑和每个 setter 内部似乎违反了 DRY 原则。有什么建议吗?
如果该验证规则是您的域的一部分,那么域对象绝对是放置逻辑的正确位置。
如果您担心保持代码干燥,您有几个选择:
看看使用 Unity 或 Castle 进行拦截
将所有 setter 设为私有,并有一个UpdateIfNotLocked()
方法,该方法采用 anExpression
指示要更新的属性、属性的新值,Expression
如果对象未处于锁定状态,则创建、编译和执行 an 以设置该属性
咬紧牙关,在这个班级的二传手中有警卫。
方法 1 和 2 都可能是合理的工作量/麻烦,因此在这种情况下您可能希望采取务实的方法。