DataRabbit 企業級數據訪問框架(21)-- DataRabbit 4.0 & DataRabbit 與三層架構融合Demo源碼

 DataRabbit 4.0 相比於前一版本,最大的增強在於以下幾點:

1.提供5大實體緩存。並且直接提供EntityCacheServer,以Remoting的方式發佈同步緩存服務,後面的博文會詳細介紹EntityCacheServer的使用。

    public enum CacheType
    {
        
/// <summary>
        
/// Static 初始化時將符合條件的Entity對象加載到緩存中,此後這些對象都一直常駐內存。
        
/// </summary>
        Static = 0 ,

        
/// <summary>
        
/// Hot 用於緩存那些活躍的Entity對象,並定時刪除不活躍的Entity對象。
        
/// </summary>
        Hot,

        
/// <summary>
        
/// TimingRefresh 定時刷新的緩存。可以定時從DB中加載符合條件的最新Entity到內存中替換老的Entity。
        
/// </summary>
        TimingRefresh,

        
/// <summary>
        
/// NDayIncreasing 用於緩存最近N天的Entity對象的增量式緩存。並且在新的一天來臨時,最老的一天的Entity對象會被從緩存中移除。
        
/// </summary>
        NDayIncreasing,

        
/// <summary>
        
/// Synchronization 與數據庫完全同步的實體緩存,所有對TEntity表的修改都必須經過SyncEntityCache進行。
        
/// </summary>
        Synchronization,

        
/// <summary>
        
/// VirtualSync 虛擬同步緩存,爲那些不需要進行緩存的數據表提供與同步實體緩存一致的訪問接口。
        
/// </summary>
        VirtualSync
    }

      其中的同步實體緩存初級版本介紹請參見這裏。 

2.DataRabbit的ORM有更大的增強,包括

(1)支持max、min、sum、avg、count等查詢:       

        /// <summary>
        
/// GetSingleValue 查詢單值,比如count,max,sum等
        
/// </summary>       
        T GetSingleValue<T>(SingleValueQueryType queryType, string columnName, params Filter[] conditions);
        T GetSingleValue
<T>(SingleValueQueryType queryType, string columnName, IFilterTree tree);

      泛型參數T表示要查詢的單值的類型。SingleValueQueryType是一個枚舉類型,表示要進行何種單值查詢:

    [EnumDescription("單值查詢類型")]
    
public enum SingleValueQueryType
    {
        [
EnumDescription("count")]
        Count 
= 0 ,
        [
EnumDescription("max")]
        Max,
        [
EnumDescription("min")]
        Min,
        [
EnumDescription("sum")]
        Sum,
        [
EnumDescription("avg")]
        Avg
    }

(2) 支持distinct查詢 

        /// <summary>
        
/// GetDistinctList 查詢某個列的所有存在值的列表。
        
/// </summary>       
        IList<T> GetDistinctList<T>(string columnName, params Filter[] conditions);
        
IList<T> GetDistinctList<T>(string columnName, IFilterTree tree);

(3)ORM內置高性能的分頁查詢

TEntity[] GetPage(int pageSize, int pageIndex, string columnOrderby, bool ascend, IFilterTree tree);
TEntity[] GetPage(
int pageSize, int pageIndex, string columnOrderby, bool ascend, params Filter[] conditions);
DataTable GetPage(int pageSize, int pageIndex, string columnOrderby, bool ascend, IFilterTree tree, params string[] columns);        

      分頁查詢可以返回對應頁的DataTable,也可返回對應的Entity數組。

      要使任何查詢高效,都必須要在設計DB時創建合適的索引,這點是必不可少的,否則,DataRabbit內置再好的分頁策略也無濟於事。

      自從DataRabbit 1.0發佈以來,一直到今天4.0,大家反映最大的是沒有一個好的demo作爲參考,今天我會親自彌補這一遺憾。

      DRTest是我親自寫的一個使用DataRabbit的demo,本Demo主要目的在於兩個:

     (1)如何使用DataRabbit的ORM常用功能。

     (2)DataRbbit如何與三層架構結合起來。關於三層架構的更多信息請參見我的blog:http://www.cnblogs.com/zhuweisky/archive/2009/05/13/1456011.html
                  
       關於DRTest 解決方案說明:

      (1)DRTest.Entity 爲Entity class定義,和在各個層中會用到的基礎類型或枚舉類型的定義。

      (2)DRTest.BEM名爲“業務實體管理”,它是真正與數據庫打交道的。DataRbbit的ORM功能使用都可以從其源碼中看到。

      (3)DRTest.BLInterface 是業務邏輯層的接口定義,如果BL與UI不部署在同一臺機器上,那麼UI層只需要引用DRTest.BLInterface即可,而不需要引用DRTest.BL。

      (4)DRTest.BL 業務邏輯層,所有的業務邏輯處理都是在這裏進行的。

      (5)DRTest.UI 用於展現數據或提交查詢等界面操作。

      (6)請注意,本Demo沒有考慮到很多例外情況和異常情況的處理,在真正的項目中,這些都是不可忽略的。 

      點擊這裏下載 DataRabbit4.0_Demo,解壓後,Resources目錄下的文件解釋如下:

      (1)EntityCreator 支持DataRabbit 4.0的實體生成器。

      (2)TestDB.sql文件是用於生成測試數據庫TestDB的腳本。(我採用的是SqlServer2008,對於2000和2005,DataRabbit 也是支持的)

      (3)DataRabbit.dll 和 DataRabbit.DBAccessing.dll 是DataRabbit 4.0程序集,其依賴於我的基礎庫ESBasic.dll

      (4)DataRabbit 完全手冊.doc ,基於DataRabbit 4.0講述。

       有任何建議請留言,或EMail 聯繫 [email protected]

       zhuweisky 2009.07.12

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章