代码之家  ›  专栏  ›  技术社区  ›  gervais.b

DDD、抽象类、聚合和存储库、一个或多个存储库?

  •  0
  • gervais.b  · 技术社区  · 6 年前

    关于A的思考 知识库 骨料 . 文献上说每个集合有一个储存库。

    但是,如果我的聚合都是基类(is-a关系,继承不用于重用)的所有子类。我必须为所有子类在存储库上创建,还是可以对所有子类使用相同的存储库。

    PaperBag paperBag = paperBagsRepository.get(paperBagId);
    PlasticBag plasticBag = plasticBagsRepository.get(plasticBagId);
    

    PaperBag paperBag = bagsRepository.get(paperBagId);
    PlasticBag plasticBag = bagsRepository.get(plasticBagId);
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   VoiceOfUnreason    6 年前

    在应用程序级别,您通常希望每个聚合有一个存储库。这里的动机是您试图最小化与实现细节耦合的代码量。

    Parnas, 1972 .

    因此,在客户机代码中,首选这种样式:

    PaperBag paperBag = paperBagsRepository.get(paperBagId);
    PlasticBag plasticBag = plasticBagsRepository.get(plasticBagId);
    

    你…吗 这样做?不,帕纳斯和DDD警察都不会来踢你的门。但是把这两个分开会使代码 更容易改变 这是可持续成功的一个重要属性。

        2
  •  0
  •   Pankaj    6 年前

    在这种情况下,我会问自己这些问题-

    1. 它们代表单独的交易吗?
    2. 引发的事件会因类型而异吗?

    第一个问题的答案本身往往会导致合理的集料设计。

    在您的特定示例中,由于类型不同,我认为可以在同一事务中创建它们。此外,引发的事件在不同类型之间也不会有所不同,因此拥有一个存储库更好。