gpt4 book ai didi

design-patterns - 使用存储库模式处理集合的说明

转载 作者:行者123 更新时间:2023-12-04 23:32:04 24 4
gpt4 key购买 nike

如果您有两个处理关系数据库持久性的存储库,一个处理“Person”对象的 personrepository 和处理“Address”对象的 addressrepository,并且一个 person 对象具有地址集合(可能是延迟加载的)。显然,personrepository 将用于保存对 person 对象的更改,addressrepository 将用于保存对 address 对象的更改,但是什么负责保存对 person 地址集合的更改?

有哪些策略可用于将人员对象地址集合的修改持久化回数据库?并且该责任在存储库中的哪个位置(它是否是 personrepository 即使在数据库中它是存储指向某个人的链接的地址)?

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

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

最佳答案

一点思考:

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

  • 地址可以在没有人的情况下存在吗?
  • 一个地址可以由多个人拥有吗?

  • 如果 1. 的答案是否定的,而 2. 的答案是否定的 - 你不应该有一个 AddressRepository 并且 Person 应该负责以正常的一对多关系保存地址与地址中的外键.否则,Person 会突然负责删除地址 - 或者需要对 AddressRepository 的引用 - IMO 将导致响应能力的可怕困惑。

    如果 1. 的答案是否定的,而 2. 的答案是肯定的——你有一个多对多的关系,Person 应该保持这种多对多的关系(因为这是唯一一个拥有持久化所需知识的人)它)。

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

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

    我希望这可以帮助您做出决定:)

    关于design-patterns - 使用存储库模式处理集合的说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3586404/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com