.NET 业务框架开发实战之四 中篇—— DAL的重构
另外就是多了一个 List<object> Query(ICriteria condiftion);方法,之所以有这个方法,Richard考虑到,可能开发人员想要直接自己写SQL语句去执行,如select avg(Count),sum(Name) from Customer...,开发人员可以写任意的语句,所以返回一个实体类不现实,就返回一个List<object>。
还有一点就是关于查询对象的改进:以前仅仅只是定义了查询对象的接口,现在用ICriteria 接口中定义来条件对象,而且还可以在条件对象声明是在对数据操作是否采用事务或者缓存。
代码
/// <summary> /// 所有的条件对象都要从这个接口继承 /// </summary> public interface ICriteria { string Name { get; set; } bool IsCache { get; set; } bool IsTransaction { get; set; } }
之后Richard又定义了一个IDataProvider,接口,声明如下 :
代码
/// <summary> /// 数据提供者要实现的借口 /// </summary> public interface IDataProvider { DataResult<TEntity> Add<TEntity>(TEntity entity) where TEntity : IDataEntity; DataResult<TEntity> Add<TEntity>(List<TEntity> entityList) where TEntity : IDataEntity; DataResult<TEntity> Update<TEntity>(TEntity entity) where TEntity : IDataEntity; DataResult<TEntity> Update<TEntity>(List<TEntity> entityList) where TEntity : IDataEntity; bool Update(ICriteria condiftion, object value); DataResult<TEntity> Delete<TEntity>(TEntity entity) where TEntity : IDataEntity; DataResult<TEntity> Delete<TEntity>(List<TEntity> entityList) where TEntity : IDataEntity; bool Delete(ICriteria condiftion); int GetCount(ICriteria condition); DataResult<TEntity> GetOne<TEntity>(ICriteria condition) where TEntity : IDataEntity; DataResult<TEntity> GetList<TEntity>(ICriteria condition) where TEntity : IDataEntity; DataResult<TEntity> GetPageData<TEntity>(ICriteria condition, int pageIndex, int pageSize, ref int entityCount) where TEntity : IDataEntity; List<object> GetCustomData(ICriteria condiftion); }
之所以要定义这个接口,其实 Richard就是想让实现了IDataContext的类踏踏实实的去做底层的数据操作,至于数据操作之后的结果以什么形式给BLL,不用IDataContext的实现者来关心,而是用IDataProvider的实现者来关心。
在IDataProvider的实现者在底层就是调用了IDataContext的实现者的方法,然后在IDataProvider中,对外提供了一些更加友好和方便使用的方法,最后在BLL中直接依赖的就是IDataProvider,而不是IDataContext。
另外,对于IDataProvider返回的DataResult也做了一些修改:如果返回的是数据实体,即 使用的是IDataEntityContext来提供底层的数据操作,那么DataResult<TEntity>是没有问题的;但是如果使用的是IDataTableContext,那么返回DataResult<TEntity>就不行了,因为IDataTableContext查询方法可能返回的DataTable,或者DataReader.所以,在设计中叶预留了一个接口:让IDataProvider返回的结果实现IDataResult接口,那么ataResult<TEntity>继承这个接口,主要用来返回数据实体,如下:
DAL的设计就到这里,下一篇文章就开始讲述对业务层的一些思考。
版权为小洋和博客园所有,转载请标明出处给作者。
http://www.cnblogs.com/yanyangtian
代码下载
转载:http://www.cnblogs.com/yanyangtian/archive/2010/06/03/1750444.html
本文链接:http://www.blueidea.com/tech/program/2010/7757.asp
出处:
责任编辑:bluehearts
上一页 .NET分布式架构开发实战(四) 中篇 [1] 下一页
◎进入论坛网络编程版块参加讨论
|