一个实体,具有不同数据库的不同有界上下文中的几个模型

时间:2014-09-08 09:24:26

标签: oop domain-driven-design cqrs

我们假设我们有一个Order实体,将在2 diff中建模。电子商务应用程序中的BC。

第一个BC是Order Placement。 BC负责收集客户从我们不同网站下达的所有订单,验证它们并通过状态为PlacedRejected的订单填充其相应的数据库。

第二个BC是Shipment。这允许仓库中的员工在离开仓库后在其数据库中将订单标记为Shipped

现在,由于两个BC都使用不同的数据库,这些数据库最初都是空的,因此需要通知Shipment BC Placed的订单,以便扫描仪想要Ship时1}} Order它将出现在Shipment BC。

我的初始方法是在Order BC放置Order placement并且Shipment BC订阅该事件并创建相应的Order后创建域事件在其数据库中为每个订单放置实体。

但是,我无法阻止我在不同数据库之间复制数据的感觉。

我的第二种方法是每次Order Placement实体订单Shipped时询问Order,但我仍然需要保持订单状态以防万一货物发生故障。

DDD POV是否有更好的方法来解决所有这些问题?

2 个答案:

答案 0 :(得分:3)

我认为你的第一种方法完全没问题。您没有复制数据,因为您已经注意到,该数据来自另一个上下文。不同背景下的相同数据意味着不同的东西。

答案 1 :(得分:2)

正如Vernon Vaughn在他的“实施领域驱动设计”一书中所指出的那样:“当我们的本地系统已经存在依赖状态时,可以实现更大程度的自治。有些人可能认为这是一个完全依赖的缓存对象,但在使用DDD时通常不是这种情况。相反,我们创建从外部模型转换的本地域对象,只维护本地模型所需的最小状态量。 因此,复制数据是可以的,只要它是其他BC需要的唯一数据。 但他也提到,如果你使用精确的副本,它可能是建模问题的标志。