Domain driven design 两个应用程序之间共享的DDD实体

Domain driven design 两个应用程序之间共享的DDD实体,domain-driven-design,Domain Driven Design,假设我有一个对象,对于两个不同的应用程序,该对象大部分都有必要的属性等,因为两个应用程序都需要使用它们。10%的属性可能不会在一个应用程序中使用。作为共享内核共享该对象和聚合/绑定上下文是否更好?或者复制存储的属性和数据?一个应用程序用于最终用户/活动,另一个应用程序用于管理用户/活动 实体通常不在BC之间共享。你可能有另一个BC在游戏中。您应该有一个BC,它是实体的记录系统。所有其他BC应位于其下游,且仅包含标识和相关数据位。通常情况下,可以使用事件驱动的体系结构来通知相关系统有关实体状态的任

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

实体通常不在BC之间共享。你可能有另一个BC在游戏中。您应该有一个BC,它是实体的记录系统。所有其他BC应位于其下游,且仅包含标识和相关数据位。通常情况下,可以使用事件驱动的体系结构来通知相关系统有关实体状态的任何相关更改

也可能是你试图分裂一个BC。也许应该把重点放在业务连续性方面,而不是技术/应用方面


希望这能有所帮助:

我们最近开发了一个应用程序,它涉及多个模块,使用了许多公共实体。当我们开发它们时,我们将这些公共实体移动到一个名为“公共域”的项目中,然后让所有相关模块使用它。结果是一场灾难

虽然我们最初发现了几个常见的属性,但我们发现我们为某些模块设计这些属性的方式与其他模块使用这些属性的方式存在冲突。改变公共域中的实体以满足一个模块的需求有时会破坏它们对其他模块的工作方式。我们没有使用测试驱动的方法,这使得查找产生的bug变得单调乏味

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

我将更进一步地提到在哪里可以共享项目。有界上下文中的每个实体都有自己的存储库。公共实体可能共享相同的基础数据库表。每个BC的实体存储库都有责任检索相关列以返回相应的实体实例