存储库模式和自定义执行 SQL

Repository pattern and execution of custom SQL

我一直在从事一个实现存储库模式的项目。基本上它具有以下结构:

Domain Objects <-- classes mapping database objects

Repositories implementing the IRepository or IGetOnlyRepository interface

DTO objects to communicate with the clients

我参与了从数据库生成报告的工作。报告相当复杂,并且依赖于从存储过程或执行动态查询生成的数据。我注意到,到目前为止,为了对报告执行查询,开发人员使用了给定存储库中的方法来对数据库执行查询(使用 NHibernate 的 session.ExecuteQuery 方法)。

但是,执行的查询通常会结合多个表,对我而言,它们不属于存储库。关于我们可以在哪里执行此类查询,您能否建议我一个好的做法?

我的建议是:不要在架构的顶层使用存储库。

制作'Reports'一个模块

您的系统应该分成模块。所以你应该有一个单独的 'Reporting' 模块,你可以在其中直接使用 sql 而不是存储库。您可能还想在报告模块中创建新的 'flat' 模型以提高性能。

如果所有模块都需要使用您的存储库进行数据访问,这就像使用一颗银弹解决不同的问题一样。那是行不通的!

限界上下文

在领域驱动设计中,有一个概念'Bounded Context'。因此,您的报告模块可能是一个单独的限界上下文。不同的限界上下文使用不同的通用语言。不要在整个系统中使用一套模型。

有用的链接