在DDD中为域模型编写适当验证的最佳方法是什么



我听说过为域模型编写验证的不同方法,所以我想知道在域驱动的设计中,哪种方法更好。

  1. 有些人说,在初始化域模型之前最好先验证它的数据(这意味着验证应该在相关的DTO上运行(
  2. 有些人说,最好在初始化域模型后验证它的数据(这意味着验证应该在初始化的实体或域模型上运行(
  3. 此外,有些人说所有的验证都应该在实体内部运行(确切地说是在setter或构造函数中(

事实上,我习惯于编写上述验证的组合,但现在我不确定。它们中哪一个是常见的,基本上更明智?

在域驱动的设计中,您最有可能看到的是"值对象",它们保证在初始化过程中满足某些约束,因此在值对象本身的构造函数中也是如此。由于值(按照惯例(在其生命周期内是不可变的,因此通常不会在其接口中包含setter。

DTO服务于不同的目的,但在许多方面与价值对象机械相似。因此,除了域模型中的验证之外,您可能还会在DTO中看到验证。

您的实体中通常没有验证。实体通常包含对值(验证其自身(或其他本地实体(在其他地方验证(的引用,因此检查引用是否正确是有限制的(即,检查null(。

最新更新