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