我正在为具有产品和商店的常见应用程序建模。
产品可以在n个商店中有库存数量,商店可以保留各种产品的库存。
即n与n的关系:
在我的模型中,Product和Store都是聚合根。
我无法理解如何使用DDD在我的班级模型中建立这种关系。
股票的更新将由商店或产品完成吗?
ProductInventory应该是一个新的Aggregate root?
答案 0 :(得分:1)
根据您附上的图表,您正在应用关系范例。 你提到了三个不同的概念。首先是产品!为了让您拥有商店,您可以以某种方式在可计算模型中表示产品。什么是产品?这是你从制造商那里得到的东西。一旦它在工厂内建成,产品就可以发送给那些进行购买的人!到目前为止我们有一个产品!它是否意味着它与商店“连接”了吗?一点也不。为什么要将产品连接到商店?谈到更好的语义,让我们重新提出问题并说明为什么要在商店中购买产品?那是因为你想卖掉它!产品抽象已经实现了它的目的!现在你需要在商店的上下文中表示一个产品,所以你必须使用另一个抽象来做到这一点......什么是商店环境中的产品?这是一个ProductInSale或出版物!你有很多产品在销售的商店,你知道通过使用另一个有凝聚力的抽象跟踪产品,所以你想出了一个股票新概念!
关注行为是非常重要的,但如果不指定每个聚合的方法,我会或多或少地恢复原状:
Product {id}
ProductInSale {id, productId, storeId, price}
Store {id, name}
Stock {id, productId, quantity}
希望它有所帮助, 塞巴斯蒂安。
答案 1 :(得分:0)
我可以想象Inventory是一个聚合根,它有一个Products列表作为值对象,包含所有需要的信息。产品可能是不同背景下的聚合根。必须通过事件将变更传达给清单,以便他们做出相应的反应。例如,使产品不再可用,应触发域事件"产品X不再可用"应该由库存处理,以从列表中删除产品(价值对象)。