在找到这篇文章之前,我不知道角色特定的存储库:
我们可以选择将接口隔离原则应用于基于角色的接口,并定义只公开一个类需要的接口,而不是一个公开所有方法的包罗万象的存储库。
public interface IProductRepositoryForNewOrder { Product[] FindDiscontinuedProducts(); }
单个存储库实现实现了所有产品存储库接口,但调用者只公开和使用所需的单个方法。
a) 两者之间的区别在于,对于特定存储库,我们每个聚合根有一个特定的合约,而角色特定的存储库我们可以每个聚合根有多个合约,这些合约中的每一个都是针对在聚合上运行的特定调用者的需求量身定制的根?
b) 在您看来,这两种模式各自的优缺点是什么?
谢谢
更新:
昨天我找到了您的一个答案,本质上您认为应该使用角色特定的存储库模式:
“另一种选择是使用 lambda 代替 OrdersSelectorService。如果 lambda 在您的语言中不可用,那么它应该是一个接口。传递 OrderRepository 的好处是基于接口隔离原则,其目标是减少不必要的耦合。 Customer 的行为不太可能需要 OrderRepository 上的所有方法,而是需要一个特定的函数,所以要明确说明。”
为什么在上面的摘录中您提倡使用角色特定存储库模式,但在这里您似乎建议仅在特殊情况下使用它。另一个主题中的示例是否是特殊情况(除此之外 - 我绝不是说您在自相矛盾,我只是看不出这两个示例在使用或不使用角色特定模式方面有何不同) ?