您的位置:首页 > 运维架构 > 网站架构

DataRabbit 企业级数据访问框架(21)-- DataRabbit 4.0 & DataRabbit 与三层架构融合Demo源码

2011-01-20 19:26 706 查看
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:/article/4619480.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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐