多层架构通用查询的思考

     一直没在网上写自己的心得,又总是看园子很多兄弟的文章。工作几年了,工作经验和人生感悟颇多的,中间夹杂着积极与消极、成功与失败,各种的体会只有自己明白,希望消极的心态不会影响到大家,积极的大家就凑合借鉴和学习一下,嘿嘿。

     搞了很久的管理系统,能抽象出来的还是很少。最初在表示层做通用查询的时候,走了很多弯路,很是迷茫,在网上找了很多相关资料,有些做法是将所有字段列一个参数列表,通过值(是否为null或者string.Empty)来判断字段是否需要组合查询。比如说GetClients(int id,string name,int regionID,...),这种做法在改数据表字段时业务逻辑层还得重新对应相应的数据表字段。这样,查询字段要求和数据库的字段一一对应,做法很不合理,最终架构被否定了。后来,看了DynamicQuery源码后,我在实现通用查询时,通过界面上设置业务属性值,在业务逻辑层解析,而不是通过上面提到的参数组合,呵呵,轻松搞定了。它解决了通用查询条件组合的依赖,利用反射技术,直接对实体类属性进行条件组合查询。在变更数据库时,只需改变数据层的字段映射关系。现在用起来挺方便,唯一不足的是在业务逻辑层查询时,访问数据时都是加载所有的数据,没办法,只好考虑在业务逻辑层用数据缓存了。DynamicQuery没有实现Like关键字,我把Like关键字的分析加上了。下面是通用查询调用的大概步骤。

业务实体: 

Code


界面层:
string strWhere = "Name like '有限公司' && Region.ID =10 ";
List<TBClient> = (new Clients()).Find(strWhere);

业务逻辑:

Code


第一次写文章,希望大家给点指导。

修改后的DynamicQuery代码

posted @ 2008-10-11 19:25  windsea123  阅读(1921)  评论(6编辑  收藏  举报