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

ger*_*s.b 4 abstract-class domain-driven-design ddd-repositories aggregateroot

对存储库聚合的思考。文献称每个聚合都有一个存储库。

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

PaperBag paperBag = paperBagsRepository.get(paperBagId);
PlasticBag plasticBag = plasticBagsRepository.get(plasticBagId);
Run Code Online (Sandbox Code Playgroud)

或者

PaperBag paperBag = bagsRepository.get(paperBagId);
PlasticBag plasticBag = bagsRepository.get(plasticBagId);
Run Code Online (Sandbox Code Playgroud)

Voi*_*son 6

在应用程序级别,您通常希望每个聚合都有一个存储库。这里的动机是您试图最大限度地减少与实现细节相关的代码量。

参见帕纳斯,1972 年

所以在客户端代码中,这种风格是首选:

PaperBag paperBag = paperBagsRepository.get(paperBagId);
PlasticBag plasticBag = plasticBagsRepository.get(plasticBagId);
Run Code Online (Sandbox Code Playgroud)

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