我正在阅读“为企业设计应用程序(Dino Esposito)”一书。它提出了一个关于验证的问题。
域模型可以具有属性CanBeSaved,该属性调用域模型的Validate()方法。一切都很好,除了复杂的情况。 例如,客户模型需要唯一的客户代码(例如000542)。您只能通过数据库访问来检查它。将验证始终放在域服务中是不是更好。那么你只有一种方法来检查聚合是否处于有效状态?如果您同时使用这两者,开发人员可以“忘记”为客户使用域服务验证。
答案 0 :(得分:1)
我发现拥有always valid个实体更好,而不是依赖外部验证对象。
话虽如此,唯一的检查有点例外,因为它通常不是聚合本身可以自己确定的东西,你必须查看所有现有的聚合以查看该值是否尚未被采用。我所做的是在创建实体之前检查值的可用性,并在数据库中放置一个约束,该约束将在持久性时验证唯一性。您还可以尝试查找包含所有实体的域概念,并使其成为具有所有代码列表的聚合,并强制执行唯一性不变。