Lor*_*ill 5 .net oop domain-driven-design repository repository-pattern
好吧,我一直在阅读一本关于域驱动设计的书,它的标题是域驱动设计的模式,原理和实践(PPPDDD).到目前为止,我很喜欢阅读它,它在.NET世界中提供了很多关于DDD的见解.但是,有一件事困扰着我.在第21章(存储库模式)中,作者提出了以下两个主张:
索赔1:
存储库不是对象.它是一个程序边界和一个明确的契约,当它在域模型中的对象命名方法时需要尽可能多的努力.
索赔2:
存储库是域模型和持久性存储之间的契约.它应该只根据域编写而不考虑底层的持久性框架.定义意图并使其明确; 不要将存储库合同视为面向对象的代码.
那么存储库模式不是OOP,而是程序化的?您是否同意本书作者的主张?为什么明确存储库方法,例如findByUsername(字符串Username)会使存储库程序性质?
我想编写OO代码,而不是程序代码.如果存储库是程序性的,它根本就会破坏我使用这种模式的目的.我真的希望作者所说的不是真的,你怎么看?
存储库不是对象.这是一个程序界限
我完全不同意这一点.存储库是一组东西.
如果你GetAll()接下来的Add()东西再GetAll()回到Repo,那么你不希望得到相同的结果.你正在谈论的事情发生了变化
=>它有一个内部状态,或者至少它看起来像是对外界的表现.
它隐藏了它的内部状态,也称为封装它,因为你可以访问的只是接口,而不是底层的持久性细节.
您可以将消息传递到存储库(调用其方法),并与同一存储库进行潜在的长时间"讨论".
对象形式非常适合存储库所做的工作.
在书中使用" 程序 "这个词充其量是尴尬的,在最坏的情况下会产生误导.它具有明确的合同这一事实与程序化的编程风格无关.