10

我一直在使用存储库模式(DDD和POEAA)一段时间。然而,我们的一些团队成员认为这只是一个额外的抽象层,并且是不必要的。 我可以在他们的论点中看到一些好处。现代的ORM解决方案(NHibernate或EF)几乎拥有您所需的一切。我搜索并找到了一些关于此主题的文章,如thiscounterargument。所以库模式是一个矫枉过正的?存储库模式过度冲击

回答

12

这主要取决于问题的复杂性以及域模型在解决方案中扮演的角色。对于简单的解决方案,Repository可能是矫枉过正的。但对于具有强大语言和不断发展的需求/需求的复杂领域,存储库是一个非常好的,干净的抽象,它拥有域对象生命周期。许多ORM将做大部分工作,但是,在一个复杂的领域中,始终存在一些在存储库中有意义的域活动,并且ORM不支持这种活动。

底线:它取决于上下文。

+9

你永远不会因'它取决于'而出错。 :) – 2010-08-09 21:26:52

+0

@Arnis - 这就是为什么,作为开发人员,我们不只是锤子,我们有一个完整的工具箱。 – Martin 2011-02-15 17:31:06

+5

@Martin有些只有胶带:) – 2011-02-16 10:16:11

4

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

1

我们在我们的项目中使用存储库的一个原因是,它强制实施我们的总根(我们只允许AR的存储库),以便正确地处理AR,而不是查询任何可能影响您的想法。

正如Al提到的那样..它确实提供了一个很好的界面,可以在单元测试中进行模拟。