.NET 業(yè)務框架開發(fā)實戰(zhàn)之四 中篇—— DAL的重構
另外就是多了一個 List<object> Query(ICriteria condiftion);方法,之所以有這個方法,Richard考慮到,可能開發(fā)人員想要直接自己寫SQL語句去執(zhí)行,如select avg(Count),sum(Name) from Customer...,開發(fā)人員可以寫任意的語句,所以返回一個實體類不現實,就返回一個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的設計就到這里,下一篇文章就開始講述對業(yè)務層的一些思考。
版權為小洋和博客園所有,轉載請標明出處給作者。
http://www.cnblogs.com/yanyangtian
代碼下載
轉載:http://www.cnblogs.com/yanyangtian/archive/2010/06/03/1750444.html
本文鏈接:http://m.95time.cn/tech/program/2010/7757.asp
出處:
責任編輯:bluehearts
上一頁 .NET分布式架構開發(fā)實戰(zhàn)(四) 中篇 [1] 下一頁
◎進入論壇網絡編程版塊參加討論
|