存储库和数据库特定的业务逻辑

时间:2012-04-13 11:56:02

标签: repository domain-driven-design

出于性能原因,我需要将一些复杂的业务逻辑放入db中,并且我正在使用存储库模式。问题是 - 我应该从存储库调用此业务逻辑吗?我知道存储库不应该知道BL,因为它只是BL和数据存储之间的中介(它应该只包含CRUD和查询方法)。 你怎么看?

1 个答案:

答案 0 :(得分:2)

存储库的职责是提供要查询或添加的实体的内存集合。我不知道你在谈论什么样的业务逻辑,但如果你在存储库中引入它,它可能会破坏单一责任原则。这意味着给Repository代码提供了许多改变的理由,减少了凝聚力,从而有很多理由要破解。

如果您的数据库中存在具有业务逻辑的存储过程,我建议您在调用代码和数据库之间引入某种接口以保持解耦。它不是一个存储库,因为它的目的是触发一些业务逻辑而不是持久化数据,但实现可以采用基础结构服务的形式。

这将允许您使用模拟数据库隔离地测试代码,并切换到数据库访问接口的另一个实现以指向另一个DBMS,如果您决定放弃某些存储过程,则切换到对象点。