DDD实体在两个应用程序之间共享

时间:2014-09-01 19:18:20

标签: domain-driven-design

假设我有一个对象,大部分都有两个不同应用程序的必要属性等,因为这两个应用程序都需要使用它们。 10%的属性可能会赢得'在一个应用程序中使用。是否更好地共享该对象(以及聚合/有界上下文作为共享内核?)或复制存储的属性和数据?一个应用程序用于最终用户/活动,另一个应用程序用于管理用户/活动。

2 个答案:

答案 0 :(得分:3)

实体通常不在BC之间共享。你可能还有另一个BC。您应该有一个BC,它是该实体的记录系统。所有其他BC应该是下游,并且只包含身份和相关的数据位。通常,人们会使用事件驱动架构来通知相关系统对相关实体状态的任何相关更改。

也可能是您正在尝试拆分单个BC。也许关注事物的BC方面,而不是技术/应用方面。

希望有所帮助:)

答案 1 :(得分:2)

我们最近开发了一个应用程序,它涉及使用许多常见实体的多个模块。当我们开发它们时,我们将这些公共实体移动到一个名为common-domain的项目中,然后让所有依赖模块使用它。原来这是一场灾难。

虽然我们最初发现了几个常见的属性,但我们发现我们为某些模块设计它们的方式与其他模块的使用方式相冲突。改变公共域中的实体以满足一个模块的需要有时会破坏它们为其他模块工作的方式。我们没有使用测试驱动的方法,并且发现导致的错误很乏味。

从这个错误中学习,我们应该已经识别并识别出有界的上下文,并在每个有界上下文中识别实体及其相关属性。 "常见"应该根据有界上下文定义实体以及该上下文所需的任何属性。一些属性肯定是常见的,但由于它们是独立的有界上下文,因此必须按每个有界上下文的实体声明它们。

我将进一步提及可以共享项目的位置。有界上下文中的每个实体都有自己的存储库。有可能"普通"实体共享相同的基础数据库表。每个BC的实体存储库都有责任检索相关列,以便返回适当的实体实例。