10

我使用存储库模式(DDD 和 POEAA)已经有一段时间了。然而,我们的一些团队成员认为这只是额外的抽象层,没有必要。我可以从他们的论点中看到一些好处。现代 ORM 解决方案(NHibernate 或 EF)几乎可以满足您的一切需求。我搜索并找到了一些这样的文章和关于这个话题的反驳。那么存储库模式是不是有点矫枉过正?

4

3 回答 3

12

这主要取决于您的问题的复杂性以及您的领域模型在解决方案中所扮演的角色。对于简单的解决方案,存储库可能是矫枉过正。但是对于具有健壮语言和不断变化的需求/要求的复杂领域,存储库是一个很好的、干净的抽象,它拥有领域对象的生命周期。许多 ORM 会做很多这样的事情,但是,在一个复杂的领域中,总会有一些领域活动在存储库中有意义,并且开箱即用的 ORM 不支持这些活动。

底线:这取决于上下文。

于 2010-08-04T11:52:03.317 回答
4

在单元测试中模拟数据访问是我使用存储库接口的主要原因。可维护性的另一个原因 - 您可以轻松实现缓存策略,或切换到其他数据访问实现,例如从服务而不是 DB 获取数据。

于 2010-08-04T11:53:05.803 回答
1

我们在项目中使用存储库的一个原因是它强制我们的聚合根是谁(我们只允许 AR 的存储库),以便您正确地通过 AR 工作,而不是查询任何您喜欢的东西。

正如 Al 提到的......它确实提供了一个很好的接口,可以在单元测试期间进行模拟。

于 2010-08-04T16:50:44.617 回答