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

Domain driven design DDD、抽象类、聚合和存储库、一个或多个存储库?,domain-driven-design,abstract-class,ddd-repositories,aggregateroot,Domain Driven Design,Abstract Class,Ddd Repositories,Aggregateroot,思考存储库和聚合。文献表明,每个聚合都有一个存储库 但是,如果我的聚合都是基类的子类(is-a关系,继承不用于重用)。我是否必须为所有子类在存储库上创建,或者是否可以为所有子类使用相同的存储库 PaperBag paperBag = paperBagsRepository.get(paperBagId); PlasticBag plasticBag = plasticBagsRepository.get(plasticBagId); 或 PaperBag paperBag = bagsRepo

思考存储库和聚合。文献表明,每个聚合都有一个存储库

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

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

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

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

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

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

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

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

  • 它们代表单独的交易吗
  • 引发的事件是否会因类型而异
  • 对第一个问题的回答本身通常会导致合理的骨料设计


    在您的具体示例中,由于只有类型不同,我认为它们可以在同一事务中创建。此外,引发的事件不会因类型而异,因此拥有一个存储库更好。

    为什么需要所有聚集从同一个类继承?主要是因为它们是相同的,但具有不同的生命周期。参考我的样本,
    纸袋
    可以回收,而
    塑料袋
    不能回收。因此,我的类共享它们的大部分属性,但有不同的方法/操作。谢谢。所以像往常一样,这要视情况而定。。与此同时,我正在评估为每种类型制作单独模块(包)的想法。你的链接(谢谢)是这个想法的好链接。为了避免重复,我将从一个唯一的存储库开始,但请记住,可以将每种类型拆分为模块。