【发布时间】:2015-11-23 15:54:40
【问题描述】:
嗯,我一直在读一本关于领域驱动设计的书,它的标题是领域驱动设计的模式、原则和实践(PPPDDD)。到目前为止,我一直很喜欢阅读它,它为 .NET 世界中的 DDD 提供了很多见解。然而,有一件事情让我很困扰。在第 21 章(Repository 模式)中,作者提出了这两个主张:
权利要求 1:
存储库不是对象。它是一个程序边界和显式契约,在为它命名方法时需要付出与领域模型中的对象一样多的努力。
权利要求 2:
存储库是域模型和持久存储之间的契约。它应该只根据领域编写,而不考虑底层持久性框架。定义意图并使其明确;不要将存储库合同视为面向对象的代码。
所以存储库模式不是面向对象的,而是程序化的?您同意本书作者的说法吗?为什么明确存储库方法,例如 findByUsername(string Username) 使存储库本质上是程序化的?
我想编写 OO 代码,而不是程序代码。如果存储库是程序性的,那么它完全扼杀了我使用这种模式的目的。我真希望作者说的不是真的,你怎么看?
【问题讨论】:
-
作者的意思很简单,你不应该在设计存储库合约时考虑到 OCP,允许传递任意查询对象。
-
是的,尽管作者提出了一些奇怪的主张,但他们的主要观点似乎是“在实践 DDD 时不要实现不灵活的 IRepository 模式,而是使用对领域的数据需求建模的显式查询方法"。
标签: .net oop repository domain-driven-design repository-pattern