我们假设我们有一个Order
实体,将在2 diff中建模。电子商务应用程序中的BC。
第一个BC是Order Placement
。 BC负责收集客户从我们不同网站下达的所有订单,验证它们并通过状态为Placed
或Rejected
的订单填充其相应的数据库。
第二个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是否有更好的方法来解决所有这些问题?
答案 0 :(得分:3)
我认为你的第一种方法完全没问题。您没有复制数据,因为您已经注意到,该数据来自另一个上下文。不同背景下的相同数据意味着不同的东西。
答案 1 :(得分:2)
正如Vernon Vaughn在他的“实施领域驱动设计”一书中所指出的那样:“当我们的本地系统已经存在依赖状态时,可以实现更大程度的自治。有些人可能认为这是一个完全依赖的缓存对象,但在使用DDD时通常不是这种情况。相反,我们创建从外部模型转换的本地域对象,只维护本地模型所需的最小状态量。 因此,复制数据是可以的,只要它是其他BC需要的唯一数据。 但他也提到,如果你使用精确的副本,它可能是建模问题的标志。