域驱动设计,存储库和混合实体

Mat*_*ers 6 domain-driven-design repository

如果存储库在构建期间相互通信,是否违反了任何域驱动的设计原则?

用户地址存储库与城市/地区/国家/地区存储库对话以获取数据的示例?

cuo*_*gle 11

它违反了域驱动设计,我认为,存储库不应该相互引用.此外,您不应该在存储库与数据库表之间映射1:1.

这是观念AggregateAggregateRoot.例如,假设在数据库中有2个表:

Order
OrderLine
Run Code Online (Sandbox Code Playgroud)

对于关系1:n,(Order,OrderLine)被定义为聚合,因为没有Order,OrderLine不能独立生存.在这种情况下,Order是此聚合的根.

有了这个,而不是创建两个存储库:

OrderRepository
OrderLineRepository
Run Code Online (Sandbox Code Playgroud)

你只需要一个人OrderRepository来处理整个聚合,使用级联加载,插入和删除OrderLine

因此,在您的情况下,应考虑您是否存在地址/城市/地区/国家/地区存储库.

希望这有帮助

  • 它确实有帮助,除了在我的系统中完成某些事情的方式.我们有未公布的省/州和国家.因此,如果用户或商店需要加载它的地址数据,并且引用了区域/国家/地区存储库将使用的表.是否可以加载不同版本的区域/国家/地区,因为在这种情况下我会更多地将它们用作值对象而不是实体? (2认同)