实体与价值对象
Entity vs Value Object
我正在尝试学习 DDD 并将其应用到一个新项目中,因此面临一个可能非常基础的问题,但我可能错过了。
限界上下文是否可以包含实体以及同一实体的值对象?
我的问题是由于我们通常需要一个 ViewModel,它除了模型数据外,还必须保留更接近视图的细节。但在某些情况下,限界上下文可能会使用某个实体作为事务中的引用对象。
例如,让我们假设一个案例。假设我们有 Employee 上下文,其中还有 Employee 实体和 Department 实体。我们将拥有两个实体的 ID。
部门可能是此域中的 created/updated 等。然后我们也可以将员工添加到该部门。
现在当我们显示一个员工时,我们想显示一些关于部门的信息,这可能不需要整个部门实体。我们可能需要该部门大约50%的详细信息。
我的问题是,在这种情况下,我们可以为部门提供另一个 ValueObject 吗?或者它会破坏什么?
如果我不这样做,那么我将被迫在较低级别上创建部门的详细信息以及一些水合物..
我的想法有道理吗?
您必须清楚地将领域模型与UI关注点分开。就您的示例而言,部门实体是一个领域概念,而部门摘要数据支持显示员工的明明是UI神器
部门实体
- 存在于域模型中
- 可能会被该模型的不同用例使用
部门摘要对象
- 存在只是为了支持特定的观点
- 不是 DDD 意义上的值对象
- 不在域模型中
那么部门摘要应该放在哪里class?摘要 class 是应用程序 service/UI 关注的问题,但持久化机制可能需要它以结构化方式在存储库界面上提供数据(如果您想避免重新打包对象)。
尽量将它放在应用服务附近,因为这是它逻辑上属于的地方。根据您的架构,您将需要一个 object-to-object 映射来获取数据从存储库到摘要对象。
我正在尝试学习 DDD 并将其应用到一个新项目中,因此面临一个可能非常基础的问题,但我可能错过了。
限界上下文是否可以包含实体以及同一实体的值对象?
我的问题是由于我们通常需要一个 ViewModel,它除了模型数据外,还必须保留更接近视图的细节。但在某些情况下,限界上下文可能会使用某个实体作为事务中的引用对象。
例如,让我们假设一个案例。假设我们有 Employee 上下文,其中还有 Employee 实体和 Department 实体。我们将拥有两个实体的 ID。
部门可能是此域中的 created/updated 等。然后我们也可以将员工添加到该部门。
现在当我们显示一个员工时,我们想显示一些关于部门的信息,这可能不需要整个部门实体。我们可能需要该部门大约50%的详细信息。
我的问题是,在这种情况下,我们可以为部门提供另一个 ValueObject 吗?或者它会破坏什么?
如果我不这样做,那么我将被迫在较低级别上创建部门的详细信息以及一些水合物..
我的想法有道理吗?
您必须清楚地将领域模型与UI关注点分开。就您的示例而言,部门实体是一个领域概念,而部门摘要数据支持显示员工的明明是UI神器
部门实体
- 存在于域模型中
- 可能会被该模型的不同用例使用
部门摘要对象
- 存在只是为了支持特定的观点
- 不是 DDD 意义上的值对象
- 不在域模型中
那么部门摘要应该放在哪里class?摘要 class 是应用程序 service/UI 关注的问题,但持久化机制可能需要它以结构化方式在存储库界面上提供数据(如果您想避免重新打包对象)。
尽量将它放在应用服务附近,因为这是它逻辑上属于的地方。根据您的架构,您将需要一个 object-to-object 映射来获取数据从存储库到摘要对象。