我在C#中构建一个DDD应用程序,我对应该在哪里清理用户输入有疑问。
我已经了解到应该在域层验证业务规则,并且应该在存储库层生成ID身份。
我应该将此用户输入清洁剂放在应用程序层吗?
(该应用程序是带有DDD架构模型的ASP.NET MVC)。
答案 0 :(得分:3)
http://verraes.net/2015/02/form-command-model-validation/
命令是表示用户意图的消息。在提交表单之后以及将Command传递给模型之前,将发生命令验证。这里要回答的问题是“这看起来像一个有效的Foo命令吗?”它保证“birthday”字段包含一个实际日期,或者“zipcode”看起来像一个zipcode。它不保证设置约束,例如用户名唯一性。换句话说,您验证消息,而不是您是否应该执行消息。
Command对象应该使用Value Objects。它们保证了它们自身的一致性,因此Command将验证委托给它们。请注意,我们不会尝试通知用户验证错误。我们只是抛出异常。这里的假设是表单可以防止格式错误,或者用户试图绕过表单验证。我们不会向攻击者返回友好的错误消息。
典型的流程可能是您获得用户输入(只是数据),然后使用工厂或构建器来创建模型将识别的值对象。