【问题标题】:Repository Pattern: How many repositories are needed to get a Contact with two Addresses?存储库模式:需要多少个存储库才能获得具有两个地址的联系人?
【发布时间】:2011-05-16 17:12:30
【问题描述】:

如果您有一个联系人,与地址具有 1:* 关系,并且可能还有一个或多个用于保存持久值对象的其他表 - 应该有多少个存储库?

是否应该只有一个 ContactRepository 和一个公共方法(GetContact(),内部调用私有方法 (GetAddresses)),返回一个完全水合的实体(Contact+Addreses)?

还是应该有两个存储库——一个用于联系人,一个用于地址,其中 COntactsRepository 调用 AddressRepository?

还是其他?

谢谢!

【问题讨论】:

  • 顺便说一句:我问的原因是......如果所有聚集在一起,使用更大的对象树,我们很快就会遇到糟糕的上帝类。另一方面,如果分开,如何有效地获取所有在 Mulberry 路上有地址的联系人?另一种选择是考虑使用 Repository + 辅助类将其分解一下……但仍有一些交叉(Mulberry 驱动器示例)我不知道该放在哪里。救命!

标签: design-patterns repository-pattern


【解决方案1】:

除了联系人之外的任何东西都可以有地址吗?

如果没有,我可能会考虑只使用一个 ContactRepository。

如果还存在诸如订单、事件等具有地址的实体,我会考虑单独的 AddressRepository。

您的 Mulberry 道路/驱动器示例暗示您只需要“123 Mulberry Rd”的一个地址记录,无论有多少联系人拥有该地址,这很可能会为创建 AddressRepository 创造更多动力。

【讨论】:

  • 蒂姆。非常感谢。我认为你一针见血,这比什么都重要。我认为从领域的角度来看,指导决策是需要的:目前,领域仅处理联系人实体。直到 DOMAIN 也开始在 Addresses 中说话(作为实体对象本身,而不是值类型),它仍然充其量只需要自己的 AddressTable 类(出于 SOP 原因),而无需暴露为一个完整的存储库。谢谢。
猜你喜欢
  • 1970-01-01
  • 2019-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多