对存储库和聚合的思考。文献说每个聚集体只有一个存储库。
但是,如果我的聚合是基类的所有子类(is-a关系,则继承不会用于重用)。我是否必须在所有子类的存储库上创建,还是可以对所有子类使用相同的存储库?
PaperBag paperBag = paperBagsRepository.get(paperBagId);
PlasticBag plasticBag = plasticBagsRepository.get(plasticBagId);
或
PaperBag paperBag = bagsRepository.get(paperBagId);
PlasticBag plasticBag = bagsRepository.get(plasticBagId);
答案 0 :(得分:1)
在应用程序级别,您通常希望每个聚合有一个存储库。这样做的动机是您试图将与实现细节有关的代码量减到最少。
请参见Parnas, 1972。
因此在客户端代码中,首选这种样式:
PaperBag paperBag = paperBagsRepository.get(paperBagId);
PlasticBag plasticBag = plasticBagsRepository.get(plasticBagId);
您有这样做吗?否。Parnas和DDD警察都不会踢您的门。但是,将两者分开将使代码变得更容易更改,这是实现可持续成功的重要属性。
答案 1 :(得分:0)
在这种情况下,我会问自己这些问题-
回答第一个问题本身通常会导致合理的总体设计。
在您的特定示例中,由于只有类型不同,我认为可以在同一事务中创建它们。同样,引发的事件在不同类型之间不会有所不同,因此拥有一个存储库会更好。