我一直在使用Repository模式(DDD和POEAA)。然而,我们的一些团队成员认为它只是一个额外的抽象层而且是不必要的。 我可以看到他们的论点有一些好处。现代ORM解决方案(NHibernate或EF)几乎拥有您需要的一切。我搜索并在此主题上找到了一些类似this和counterargument的文章。那么存储库模式是否过度了?
答案 0 :(得分:12)
这主要取决于问题的复杂性以及域模型在解决方案中扮演的角色。对于简单的解决方案,Repository可能有点过分。但对于具有强大语言和不断变化的需求/需求的复杂域,Repository是一个很好的,干净的抽象,拥有域对象生命周期。许多ORM会做很多事情,但是,在复杂的域中,总会有一些在存储库中有意义的域活动,并且ORM不支持开箱即用。
底线:这取决于具体情况。
答案 1 :(得分:4)
在单元测试中模拟数据访问是我使用存储库接口的主要原因。可维护性的另一个原因 - 您可以轻松实现缓存策略,或切换到其他数据访问实现,例如从服务而不是数据库获取数据。
答案 2 :(得分:1)
我们在项目中使用存储库的一个原因是它强制执行我们的聚合根(我们只允许存储库用于AR),以便您正确地处理AR而不是查询您想要的任何攻击。
正如Al提到的那样..它确实提供了一个很好的界面来模拟单元测试。