W3M*_*Max 14 validation domain-driven-design
在DDD中,您绝不应让您的实体进入无效状态.话虽这么说,你如何处理独特约束的验证?
创建实体不是一个真正的问题.但是,假设您有一个必须具有唯一名称的实体,并且该实体类型有一千个实例 - 它们不在内存中但存储在数据库中.现在假设你要重命名一个实例.
您不能只使用setter ...对象可能进入无效状态 - 您必须对数据库进行验证.
您如何在Web环境中处理此场景?
Jas*_*rue 15
唯一性约束可以简化为持久性异常,而不是被视为"无效状态".在持久化对象之前,它不是无效状态.唯一性在持久性的背景下才有意义.实际上,您可以将此类规则放在验证机制中以帮助降低此错误的可能性,但在任何实际的多用户系统中,在成功的工作单元完成持久性操作之前,您无法保证唯一性.
因此,您可能需要在验证机制中使用此功能,但必须在持久层中强制执行此功能.
我一般都喜欢DDD作为一种方法论,但我认为"不允许对象进入无效状态"可能需要一些曲折的抽象.在Web应用程序中,拥有单独的"视图模型"是一种可能的解决方案,作为持久性之前的中间层,但我通常不这样做,直到我确信它会比简单的替代方案减少痛苦.