我理解在有界上下文之间存在数据的双重性。问题是,我不太确定聚合根之间数据的真实性。
我有产品在产品聚合中,也有产品在购物车聚合中。两者都位于相同的BC (ShoppingCart)中,并且共享很少的字段(名称、描述、.)。使用MySQL作为存储。两个聚合中的产品应该存储在一个表中还是单独存储在一个表中?
我不介意重复,但在这种情况下,数据库中会有n个产品用于n个购物车项目。

发布于 2015-06-16 15:20:07
我认为您想要在一个有限的上下文中进行规范化设计。如果一个聚合是另一个聚合的纯子集(例如,cart的产品是产品的子集),我可能会使用一个表。否则,我可能会使用第二个表,它引用第一个表,而不是在两个表之间复制列。
就其价值而言,我不相信您所描述的两个不同的产品项目都是聚合的。其中一个或两者都可能只是实体或值对象;也许在这个BC中实际上只有一个产品聚合。
更新
基于您的关系图:在cart域中,您需要一组对产品的引用(按产品ID)。我甚至不会称它为产品表,而是称之为购物车项目表。此购物车项目表将包含与购物车项目相关的字段,例如:购物车表项目id、产品表外键引用,以及适用于购物车但不适用于产品的内容,例如,正在订购的此产品项目数量的计数,甚至添加到购物车时的时间戳(添加到购物车的价格等)。
我不会复制购物车项目表中的任何产品表列。当您需要一个产品项列值(例如描述)时,可以使用cart item表中的联接来获得它。
(如果/当您发现出于性能原因,您希望开始使这些内容更加独立,那么就应该开始将它们看作不同的有界上下文,因为为了性能而将这些内容解耦会引入新的(一致性管理)职责。在两个不同的上下文中,您可以在运行多个数据库以提高性能时,根据需要使用翻译、复制和缓存以及事件。)
https://softwareengineering.stackexchange.com/questions/286909
复制相似问题