实体与价值对象

Entity vs Value Object

我正在尝试学习 DDD 并将其应用到一个新项目中,因此面临一个可能非常基础的问题,但我可能错过了。

限界上下文是否可以包含实体以及同一实体的值对象?

我的问题是由于我们通常需要一个 ViewModel,它除了模型数据外,还必须保留更接近视图的细节。但在某些情况下,限界上下文可能会使用某个实体作为事务中的引用对象。

例如,让我们假设一个案例。假设我们有 Employee 上下文,其中还有 Employee 实体和 Department 实体。我们将拥有两个实体的 ID。

部门可能是此域中的 created/updated 等。然后我们也可以将员工添加到该部门。

现在当我们显示一个员工时,我们想显示一些关于部门的信息,这可能不需要整个部门实体。我们可能需要该部门大约50%的详细信息。

我的问题是,在这种情况下,我们可以为部门提供另一个 ValueObject 吗?或者它会破坏什么?

如果我不这样做,那么我将被迫在较低级别上创建部门的详细信息以及一些水合物..

我的想法有道理吗?

您必须清楚地将领域模型与UI关注点分开。就您的示例而言,部门实体是一个领域概念,而部门摘要数据支持显示员工的明明是UI神器

部门实体

  • 存在于域模型中
  • 可能会被该模型的不同用例使用

部门摘要对象

  • 存在只是为了支持特定的观点
  • 不是 DDD 意义上的值对象
  • 不在域模型中

那么部门摘要应该放在哪里class?摘要 class 是应用程序 service/UI 关注的问题,但持久化机制可能需要它以结构化方式在存储库界面上提供数据(如果您想避免重新打包对象)。

尽量将它放在应用服务附近,因为这是它逻辑上属于的地方。根据您的架构,您将需要一个 object-to-object 映射来获取数据从存储库到摘要对象。