使用存储库模式处理集合时的澄清

gmn*_*gmn 4 orm design-patterns domain-driven-design repository-pattern

如果你有两个处理持久性关系数据库的存储库,一个处理"Person"对象的personrepository,一个处理"Address"对象的地址存储库,一个person对象有一个地址集合(可能是延迟加载的).显然,personrepository将用于持久更改person对象,而addressrepository将用于持久更改地址对象,但是对于持久更改人员地址集合会有什么责任呢?

有哪些策略可用于持久修改人员对象地址集合返回数据库?那个责任在哪里存放在存储库中(即使在数据库中它也是存储链接到某个人的地址)它是个人存储库吗?

我应该提到这不是使用ORM.

感谢您的任何帮助,任何策略/澄清将不胜感激.

Gob*_*lin 5

有点思考的东西:

在决定如何解决问题之前,您需要回答两个问题:

  1. 地址可以在没有人的情况下存在吗?
  2. 地址可以由多个人拥有吗?

如果对1.的答案为否且对2.的答案为否 - 您不应该有一个AddressRepository,而Person应该负责将地址保存在与地址中的外键的正常1对多关系中.否则,Person突然负责删除地址 - 或者需要对AddressRepository的引用 - 这个IMO会以极其糟糕的响应能力结束.

如果对1.的答案是否定的,答案是2.是的 - 你有多对多的关系,而且人应该保持这种多对多的关系(因为这是唯一一个具有持续所需知识的人)它).

如果对1.的答案是肯定而答案是2.否则 - 地址应该负责更新关系 - 并且应该具有Partner属性,因此对象中的关联是单向的.

最后 - 如果两者都是肯定的 - 你再次拥有多对多关系,但这次让地址处理多对多关联会更合理.

我希望这可以帮助你决定:)