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 联系 sky.zhuwei@163.com

       zhuweisky 2009.07.12

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 轻量、弱侵入性。比如,DataRabbit对你的数据库设计没有任何要求(而有的数据访问框架可能要求数据表必须有唯一主键)。 2. 约定优于配置。使用DataRabbit不需要任何配置,这使得DataRabbit更加易用。 3. 数据库类型无关性。统一的数据访问接口屏蔽了数据库类型的差异,目前版本的DataRabbit内置了对SqlServer和Oracle的支持,可以通过插件的方式来支持其它类型的数据库。 4. DataRabbit中的所有数据访问功能都是由各种访问器(如IOrmAccesser、IRelationAccesser、ITableAccesser、IDataSchemaAccesser、IEntityRelationLoader、ISPAccesser)来提供的。 5. 所有的访问器接口的引用都可以从DataRabbit的根(“Root”,或称入口点)获得,这个根就是TransactionScopeFactory。 6. 一个根(“Root”)实例就对应着一个数据库。也可以这么说,针对一个特定的数据库,我们的应用只需要维护一个Root即可。 7. DataRabbit提供的所有的访问器(如IOrmAccesser)都可以在两种环境中工作:事务环境和非事务环境。这是由所有的访问器都继承了的ITransactionAccesser这个接口体现出来的。 8. 任何一个访问器实例,如果在非事务环境中工作,那么它就是无状态的,DataRabbit将以Singleton的模式提供它的实例;如果访问器实例工作于事务环境中,那么它就是有状态的,并且它的生命期将随事务的结束而结束,DataRabbit以“Single Call”的模式提供它的实例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值