我是“DDD with C#”世界的新手,我对确保某些验证规则的位置有疑问。 例如,我的一个实体有一个闭包概念,如果他的状态被锁定,则不能改变其他属性。
哪里是定位此验证的最佳位置?我似乎没有把这个规则带到aplication层,只是禁止字段版本和每个setter内部似乎打破了DRY原则。有什么建议吗?
答案 0 :(得分:1)
如果该验证规则是您域的一部分,则域对象为definitely the right place以放置逻辑。
如果您担心保持代码干,您可以选择以下几种方法:
使用Unity或Castle
将所有setter设为私有,并使用UpdateIfNotLocked()
方法,该方法需要Expression
来指示要更新的属性,属性的新值,以及创建,编译和执行{ {1}}如果对象未处于锁定状态,则设置该属性
咬紧牙关,并为本课程的主持人提供警卫。
方法1和方法2可能都是合理的工作/麻烦,所以在这种情况下你可能想采取务实的方法。