实体与价值对象

时间:2016-01-23 06:08:50

标签: c# domain-driven-design

我正在尝试学习并将DDD应用于一个新项目,所以面对的问题可能是非常基本的问题,但我可能错过了。

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

我的问题出现是因为我们通常需要一个ViewModel,除了Model数据之外,它还必须保留更接近View的细节。但是有些情况下,有界上下文可能会使用某个实体作为事务中的引用对象。

例如,让我们假设一个案例。假设我们有Employee上下文,我们也有Employee实体和Department实体。我们将为这两个实体提供ID。

可以在此域中创建/更新部门等。然后我们也可以将员工添加到这些部门。

现在,当我们展示一名员工时,我们希望显示一些可能不需要整个部门实体的部门信息。我们可能需要该部门约50%的细节。

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

如果我不这样做,那么我将被迫创造一些如何在较低层次上保持部门细节的水合作用。

我的想法有意义吗?

1 个答案:

答案 0 :(得分:1)

您必须明确区分域模型与UI关注。就您的示例而言,部门实体是域概念,而支持显示员工的部门摘要数据显然是UI工件。

部门实体

  • 生活在域名模型中
  • 可能会被该模型上的不同用例使用

部门摘要对象

  • 仅存在支持特定视图
  • DDD意义上的不是值对象
  • 不在域模型中

那么你应该把部门摘要课放在哪里?摘要类是应用程序服务/ UI关注点,但持久性机制可能需要它以存储库接口上的结构化方式提供数据(如果您想避免重新打包对象)。

尝试将其放在app服务附近,因为这是它在逻辑上所属的位置。根据您的体系结构,您需要一个对象到对象的映射来将数据从存储库中获取摘要对象。