对于以下贫血域模型:
stock: id, code, description, total_amount
- 特定库存类型,计算total_amount
以加快显示剩余数量的视图,stock_arrival: id, date, document_id
- 库存到达事件,以及出于官僚主义/历史原因使用document_id
的详细信息的参考文档,stock_arrival_line: stock_arrival_id, stock_id, quantity, unit_price
- 描述到货时特定库存变化的行,包括定价,stock_removal: id,...
- 库存清除事件,stock_removal_line: stock_removal_id, stock_id
- 描述移除事件时特定库存变化的行,- 。其他变化股票事件...
贫血域模型具有以下关系约束:
stock_arrival_line:stock_id
参考资料stock:id
,stock_arrival_line:stock_arrival_id
参考资料stock:id
,stock_removal_line:stock_id
参考文献stock:id
,stock_removal_line:stock_removal_id
参考资料stock:id
,
可能,stock
和stock_arrival
/stock_removal
应该是聚合根,..
上面的域表明,通过映射表,stock
和stock_arrival
/stock_removal
之间存在多对多关系,这是我关心的主要部分。
不变量应仅在聚合根及其内部定义。因此,在聚合stock
中,需要存储stock_arrival_line
/stock_removal_line
,以使聚合stock
完整。
但是,这同样适用于聚合根stock_arrival
/stock_removal
,它们需要分别包含自身stock_arrival_line
/stock_removal_line
,以使这些关于事件的聚合根完整。
遵循 DDD 时,这些...line
应属于何处?它们应该重复吗?或者,它应该完全不同地建模吗?
对可能的接近投票者的免责声明:我已经完成了计算机科学研究,数据和操作之间存在严重分歧。最近,我偶然发现了领域驱动的设计,并开始学习它,这是完全不同的方法,我对这种多对多关系和聚合根源感到迷茫。
在您的情况下,Stock
应该是聚合根。StockArrival
和StockRemoval
可以扩展事件类,您可以将其重命名为StockArrived
和StockRemoved
相对于事件类型对象的过去时态。此外,事件可以包含Line
实例的列表(其中Line
是一个抽象类,由StockArrivalLine
和StockRemovalLine
子类化(,并通过事件类中的stockId
属性引用Stock
聚合。在现实生活中,文档上的Line
没有id
,而是orderNumber
。如果是Line
类id
属性,这个名字听起来很合成,我认为你应该把它重命名为orderNumber
。