MJK*_*MJK 4 c# validation design-patterns domain-driven-design domain-model
量化域模型的整体值 (1) 已被检查以确保它们是可识别的值,可能已被域模型进一步编辑以使其适用,并已回显 (4) 给用户。所有这些检查都是在入境时立即进行的。然而,有一类检查应该推迟到最后可能的时刻。
在信息完整性的检查模式语言中, Ward Cunningham 解决了整个对象的延迟验证 (6)。但这对我来说仍然不完全清楚:(
我知道延迟验证是对复杂对象的非常详细的验证。那么,在遵循 DDD 时,我应该在测试方法中还是在域属性中使用此验证?这可以为 UI 实现吗?
还有我什么时候应该避免这种情况?延迟验证的缺点是什么?任何人都可以用一个例子来解释这个吗?提前致谢
对此有多种意见,验证是一个相当大的主题,但通常您永远不想让域对象处于无效状态。因此,在对象构造时进行验证并立即抛出异常。
例如,Person在大多数域中,没有名称的对象就不能存在。
但是,并不总是可以在构建时验证对象不变量。这就是必须允许对象以不完整/瞬态状态存在的情况。
例如
您正在构建一个允许用户发布广告的应用程序。在发布广告之前,所有字段都是必需的,但有很多详细信息需要填写,您希望让用户可以选择保存未完成的工作并稍后继续。
在上面的示例中,无法Ad在构建时验证实体,因为您必须允许保存不完整的广告。
在这种情况下,广告发布的验证只会在它即将发布时发生。
请记住,在您的域中还有许多其他方法可以解决上述问题。例如,人们可能不想让Ad实体处于无效状态,并且可以引入一个持久AdBuilder对象,用于表示有状态的广告创建过程。
此外,有些人还可以决定保存不完整的工作不是域问题,并且不完整的信息应该存储在客户端(例如localStorage在 Web 浏览器中),直到它准备好发布。