C#(或任何语言)DDD - 清理用户输入数据的位置?

时间:2017-02-16 17:24:27

标签: c# domain-driven-design

我在C#中构建一个DDD应用程序,我对应该在哪里清理用户输入有疑问。

我已经了解到应该在域层验证业务规则,并且应该在存储库层生成ID身份。

我应该将此用户输入清洁剂放在应用程序层吗?

(该应用程序是带有DDD架构模型的ASP.NET MVC)。

1 个答案:

答案 0 :(得分:3)

http://verraes.net/2015/02/form-command-model-validation/

  

命令是表示用户意图的消息。在提交表单之后以及将Command传递给模型之前,将发生命令验证。这里要回答的问题是“这看起来像一个有效的Foo命令吗?”它保证“birthday”字段包含一个实际日期,或者“zipcode”看起来像一个zipcode。它不保证设置约束,例如用户名唯一性。换句话说,您验证消息,而不是您是否应该执行消息。

     

Command对象应该使用Value Objects。它们保证了它们自身的一致性,因此Command将验证委托给它们。请注意,我们不会尝试通知用户验证错误。我们只是抛出异常。这里的假设是表单可以防止格式错误,或者用户试图绕过表单验证。我们不会向攻击者返回友好的错误消息。

典型的流程可能是您获得用户输入(只是数据),然后使用工厂或构建器来创建模型将识别的值对象。