【问题标题】:Relations between Repositories for Aggragates in DDDDDD 中聚合的存储库之间的关系
【发布时间】:2019-09-26 00:23:44
【问题描述】:

我正在为聚合构建一个存储库。我们有 3 个不同的实体来构建它,其中一个是根。

所有 3 个数据都保存在 SQL 数据库中。每个人都有自己的桌子。

让我们考虑获取这些聚合的完整列表的简单案例。我需要从所有 3 个表中获取数据。我应该构建一个优化查询来获取此数据集,还是将每个实体的逻辑封装在它自己的存储库中并将其组装到 Aggragate 的存储库中? (然后聚合 repo 将调用相应的 repos 并组装它)

我倾向于第一个解决方案,但它的耦合更强。从 OOP 的角度来看,后者似乎更好,但似乎过于复杂,并且可能导致后续数据集的缓存失效等问题。

【问题讨论】:

    标签: oop architecture repository domain-driven-design


    【解决方案1】:

    对于需要全局访问的每种类型的对象,创建一个对象,以提供存储在内存中的所有此类对象的错觉。通过全局接口配置访问。 [..] 定义添加和删除对象的方法。 [..] 仅为聚合定义存储库。 ~ Evans,关于存储库

    您应该只为聚合创建一个存储库。没有理由创建单独的存储库。更重要的是,创建单独的存储库会导致您提到的一些其他问题。

    我倾向于第一个解决方案,但它更强大 耦合。

    要回答这个问题,请查看Aggregate definition from Martin Fowler

    聚合是领域驱动设计中的一种模式。 DDD 聚合是一个 可以被视为一个单元的领域对象集群。一个 示例可能是订单及其订单项,这些将是分开的 对象,但处理订单很有用(连同它的行 项目)作为单个聚合。

    聚合是耦合由定义构成的实体。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-20
      相关资源
      最近更新 更多