YbSoftwareFactory 代码生成插件【十四】:通过 DynamicLinq 简单实现 N-Tier 部署下的服务端数据库通用分页
2013-07-30 08:35
866 查看
YbSoftwareFactory 的 YbRapidSolution for WinForm 插件使用CSLA.NET作为业务层,CSLA.NET的一个强大的特性是支持 N-Tiers 部署。只需非常简单的配置就能在本1-Tier部署方式和N-Tiers部署方式之间切换,这个过程无需编写任何额外的代码,这对于 WinForm 和 WPF 等客户端的开发来说是非常重要的特性,更多信息请参考我前面的文章:YbSoftwareFactory 代码生成插件【七】:YbRapidSolution for WinForm 插件生成项目总体架构介绍。但众所周知,VS 在 WinForm 的开发环境下没有提供相应的分页控件,网上很多针对实现的分页控件虽然实现了数据库分页但往往也要丢失一些在WinForm下的重要特性,通用性和易用性都稍差。本文描述了通过 DynamicLinq 来实现非常方便的自定义过滤条件和自定义排序规则的服务器端数据库分页,并提供 DynamicLinq 的代码下载。
YbRapidSolution for WinForm 插件解决方案的界面层使用DevExpress,DevExpress 的 GridContro l控件比 VS 自带的 DataGridView 不知强大多少倍,自定义过滤、分组、统计、列选择等一气呵成,甚至连数据的导出也非常的全面和方便。但如果不进行数据库分页的话往往性能低下,DevExpreess 可以通过实现 IListserver 提升大数量下的性能,但在 N-Tier 模式下实现的难度和复杂程度超乎想象,我们此处将通过采用折中的解决方案。
在我前面介绍的 YbRapidSolution for MVC 插件中,已经使用了 DynamicLinq 来进行查询、分页和排序,而在 WinForm 插件中我们同样使用 DynamicLinq 来实现类似的分页效果。通过使用 DynamicLinq 后,不仅保留了 DevExpress 的GridControl 控件的一些主要特性,性能的提升也是显而易见的。首先来看看几张分页效果的大图:
1、 分页总体效果图(服务层端的数据库分页):
2、 可任意列进行排序
3、可自定义查询条件,注意此处可是跨表查询
4、支持组合查询和其他字段类型
本方案的实现效果很好,也非常灵活,所有的分页数据均来源于服务层而不是直接来源于数据层。更关键的是所需的代码量极少,如下就是本模块的简单的分页调用代码:
1 public OrdersList Fetch(PagerCriteria criteria)
2 {
3 var result = new OrdersList();
4 result.RaiseListChangedEvents = false;
5 SetIsReadOnly(result, false);
6 var data = _repository.Table;
7 if (!string.IsNullOrWhiteSpace(criteria.Filter1))
8 {
9 data = data.Where(criteria.Filter1);
}
result.TotalRowCount = data.Count();
if (string.IsNullOrWhiteSpace(criteria.Sort))
{
criteria.Sort = "OrderID";
}
data = data.OrderBy(string.Format("{0} {1}", criteria.Sort, criteria.Order));
if (criteria.Page <= 0)
criteria.Page = 1;
var items = data.Skip((criteria.Page - 1) * criteria.Rows).Take(criteria.Rows).ToList();
foreach (var item in items)
{
result.Add(EntityToBusinessObject(item));
}
result.RaiseListChangedEvents = true;
SetIsReadOnly(result, true);
return result;
同时附上即将实现的一个流程设计器界面:
在下一章中,我们将介绍如何实现属性自动扩展并可方便地从数据库中加载和保存的解决方案。
附件:DynamicLinq 下载地址:DynamicLinq
YbRapidSolution for WinForm 插件解决方案的界面层使用DevExpress,DevExpress 的 GridContro l控件比 VS 自带的 DataGridView 不知强大多少倍,自定义过滤、分组、统计、列选择等一气呵成,甚至连数据的导出也非常的全面和方便。但如果不进行数据库分页的话往往性能低下,DevExpreess 可以通过实现 IListserver 提升大数量下的性能,但在 N-Tier 模式下实现的难度和复杂程度超乎想象,我们此处将通过采用折中的解决方案。
在我前面介绍的 YbRapidSolution for MVC 插件中,已经使用了 DynamicLinq 来进行查询、分页和排序,而在 WinForm 插件中我们同样使用 DynamicLinq 来实现类似的分页效果。通过使用 DynamicLinq 后,不仅保留了 DevExpress 的GridControl 控件的一些主要特性,性能的提升也是显而易见的。首先来看看几张分页效果的大图:
1、 分页总体效果图(服务层端的数据库分页):
2、 可任意列进行排序
3、可自定义查询条件,注意此处可是跨表查询
4、支持组合查询和其他字段类型
本方案的实现效果很好,也非常灵活,所有的分页数据均来源于服务层而不是直接来源于数据层。更关键的是所需的代码量极少,如下就是本模块的简单的分页调用代码:
1 public OrdersList Fetch(PagerCriteria criteria)
2 {
3 var result = new OrdersList();
4 result.RaiseListChangedEvents = false;
5 SetIsReadOnly(result, false);
6 var data = _repository.Table;
7 if (!string.IsNullOrWhiteSpace(criteria.Filter1))
8 {
9 data = data.Where(criteria.Filter1);
}
result.TotalRowCount = data.Count();
if (string.IsNullOrWhiteSpace(criteria.Sort))
{
criteria.Sort = "OrderID";
}
data = data.OrderBy(string.Format("{0} {1}", criteria.Sort, criteria.Order));
if (criteria.Page <= 0)
criteria.Page = 1;
var items = data.Skip((criteria.Page - 1) * criteria.Rows).Take(criteria.Rows).ToList();
foreach (var item in items)
{
result.Add(EntityToBusinessObject(item));
}
result.RaiseListChangedEvents = true;
SetIsReadOnly(result, true);
return result;
同时附上即将实现的一个流程设计器界面:
在下一章中,我们将介绍如何实现属性自动扩展并可方便地从数据库中加载和保存的解决方案。
附件:DynamicLinq 下载地址:DynamicLinq
相关文章推荐
- YbSoftwareFactory 代码生成插件【十四】:通过 DynamicLinq 简单实现 N
- 通过 DynamicLinq 简单实现 N-Tier 部署下的服务端数据库通用分页
- YbSoftwareFactory 代码生成插件二次开发IPlugInRepository接口的实现
- YbSoftwareFactory 代码生成插件【十六】:Web 下灵活、强大的审批流程实现(含流程控制组件、流程设计器和表单设计器)
- YbSoftwareFactory 代码生成插件【十一】:ASP.NET WebApi MVC下组织机构管理和菜单权限管理的实现
- YbSoftwareFactory 代码生成插件【二十四】:MVC中实现动态自定义路由
- YbSoftwareFactory 代码生成插件【十】:ASP.NET WebApi MVC下审计、缓存和导出功能的实现
- YbSoftwareFactory 代码生成插件【二十二】:CMS基础功能的实现
- YbSoftwareFactory 代码生成插件【二】:二次开发之 IPlugInGroupRepository 接口的实现
- YbSoftwareFactory 代码生成插件【三】:二次开发之 IPlugInRepository 接口的实现
- YbSoftwareFactory 代码生成插件【十九】:实体类配合数据库表字段进行属性扩展的小技巧
- YbSoftwareFactory 代码生成插件【十八】:树形结构下的查询排序的数据库设计
- YbSoftwareFactory 代码生成插件【十九】:实体类配合数据库表字段进行属性扩展的小技巧
- YbSoftwareFactory 代码生成插件【九】:基于JQuery、WebApi的ASP.NET MVC插件的代码生成项目主要技术解析
- YbSoftwareFactory 代码生成插件【十七】:先进的权限模型体系设计
- YbSoftwareFactory 代码生成插件【十二】:超级灵活方便的应用程序设置管理API
- YbSoftwareFactory 代码生成插件【二十】:DynamicObject的序列化
- YbSoftwareFactory 代码生成插件【一】:概述
- YbSoftwareFactory 代码生成插件【二十三】:集成强大的公文流转系统
- YbSoftwareFactory 代码生成插件【二十一】:Web Api及MVC性能提升的几个小技巧