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

时间:2015-03-18 12:39:23

标签: design-patterns nhibernate repository-pattern

我一直致力于实现存储库模式的项目。基本上它有以下结构:

  

Domain Objects< - 映射数据库对象的类

     

实现IRepository或IGetOnlyRepository的存储库   接口

     

DTO对象与客户端进行通信

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

但是,执行的查询通常会组合多个表,对我来说,它们不属于存储库。您能否建议我在哪里执行此类查询?

1 个答案:

答案 0 :(得分:1)

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

制作'报告'模块

您的系统应该拆分为模块。因此,您应该有一个单独的“报告”模块,您可以使用直接sql而不是存储库。您可能还希望在报告模块中创建新的“扁平”模型以实现性能目的。

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

有界上下文

在领域驱动设计中,有一个概念“有界上下文”。因此,您的报告模块可能是一个单独的有界上下文。不同的有界上下文使用不同的无处不在的语言。不要在整个系统中使用一组模型。

有用的链接