首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

ASP.NET设计形式之Query Object模式

2013-03-13 
ASP.NET设计模式之Query Object模式当我们应用Repository模式作为数据仓储时,如果我们不使用Query Object

ASP.NET设计模式之Query Object模式

当我们应用Repository模式作为数据仓储时,如果我们不使用Query Object模式,那么我们的Repository将会充满大量的检索方法,如下:


1.构建条件操作符枚举

private string CreatePageSql(string fields, string orderBy, string where){    return string.Format("SELECT {0} FROM (SELECT ROW_NUMBER() OVER ({1}) AS [ROW_NUMBER],{0} FROM [{3}users] AS [t0] {2}) "                + "AS [t1] WHERE [t1].[ROW_NUMBER] BETWEEN @pageindex*@pagesize + 1 AND @pageindex + @pagesize",                fields, orderBy, where, BaseSettings.GetTablePrefix());}

参考书籍《ASP.NET设计模式》这是翻译版的原版为《Professional ASP.NET Design Patterns》,书上的是结合了EF和NH写法有点不一样。还有书上的只是简单的写了个结构,也许是为了讲解方便吧。按书上的写法,动态生成SQL只能支持单一排序并且不支持In查询,我算是扩展了一点了吧

说说Query Object的优缺点,从网上找到的。

查询对象的好处

1、完全将底层数据库的查询语言抽象出来,因此将数据库持久化和检索的基础设施关注点从业务层中分离出来。

2、对于多个数据库,通过设计查询对象,根据运行的数据库来产生不同的sql,屏蔽了各种不同sql语法中的差别。

3、消除对数据库的查询冗余,如果在先前的会话中运行过相同的查询,可以使用查询对象从标志映射中选取对象。

其他的两点都明白,就第三点没明白,懂得朋友解释解释。

缺点没说,我来说说吧。

1.不能生成繁杂的查询,如连表查询,当然可以使用存储过程,问题在于不是所用的数据库都支持存储过程

2.命名查询时的把存储过程的名称添加到QueryName枚举中,是不是有点不方便呢?


本人才开始学习设计模式,以上是个人的愚见,望高手赐教。

点击下载Demo





热点排行