首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DDD -集合体之间的口是心非-我应该用一张桌子吗?

DDD -集合体之间的口是心非-我应该用一张桌子吗?
EN

Software Engineering用户
提问于 2015-06-16 07:23:49
回答 1查看 1.8K关注 0票数 4

我理解在有界上下文之间存在数据的双重性。问题是,我不太确定聚合根之间数据的真实性。

我有产品在产品聚合中,也有产品在购物车聚合中。两者都位于相同的BC (ShoppingCart)中,并且共享很少的字段(名称、描述、.)。使用MySQL作为存储。两个聚合中的产品应该存储在一个表中还是单独存储在一个表中?

我不介意重复,但在这种情况下,数据库中会有n个产品用于n个购物车项目。

EN

回答 1

Software Engineering用户

发布于 2015-06-16 15:20:07

我认为您想要在一个有限的上下文中进行规范化设计。如果一个聚合是另一个聚合的纯子集(例如,cart的产品是产品的子集),我可能会使用一个表。否则,我可能会使用第二个表,它引用第一个表,而不是在两个表之间复制列。

就其价值而言,我不相信您所描述的两个不同的产品项目都是聚合的。其中一个或两者都可能只是实体或值对象;也许在这个BC中实际上只有一个产品聚合。

更新

基于您的关系图:在cart域中,您需要一组对产品的引用(按产品ID)。我甚至不会称它为产品表,而是称之为购物车项目表。此购物车项目表将包含与购物车项目相关的字段,例如:购物车表项目id、产品表外键引用,以及适用于购物车但不适用于产品的内容,例如,正在订购的此产品项目数量的计数,甚至添加到购物车时的时间戳(添加到购物车的价格等)。

我不会复制购物车项目表中的任何产品表列。当您需要一个产品项列值(例如描述)时,可以使用cart item表中的联接来获得它。

(如果/当您发现出于性能原因,您希望开始使这些内容更加独立,那么就应该开始将它们看作不同的有界上下文,因为为了性能而将这些内容解耦会引入新的(一致性管理)职责。在两个不同的上下文中,您可以在运行多个数据库以提高性能时,根据需要使用翻译、复制和缓存以及事件。)

票数 3
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/286909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档