将安全验证放在DDD项目中的正确位置

时间:2012-05-31 19:45:42

标签: c# validation domain-driven-design

我是“DDD with C#”世界的新手,我对确保某些验证规则的位置有疑问。 例如,我的一个实体有一个闭包概念,如果他的状态被锁定,则不能改变其他属性。

哪里是定位此验证的最佳位置?我似乎没有把这个规则带到aplication层,只是禁止字段版本和每个setter内部似乎打破了DRY原则。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

如果该验证规则是您域的一部分,则域对象为definitely the right place以放置逻辑。

如果您担心保持代码干,您可以选择以下几种方法:

  1. 使用Unity或Castle

  2. 进行拦截
  3. 将所有setter设为私有,并使用UpdateIfNotLocked()方法,该方法需要Expression来指示要更新的属性,属性的新值,以及创建,编译和执行{ {1}}如果对象未处于锁定状态,则设置该属性

  4. 咬紧牙关,并为本课程的主持人提供警卫。

  5. 方法1和方法2可能都是合理的工作/麻烦,所以在这种情况下你可能想采取务实的方法。