让阳光指引生命的每一刻,乘着风,跟随我融化空气

美丽的地球,有美丽的cnblog [hjp3]hjptype=song&player=1&son=http://www.taihugolf.com.cn/villa/sound_00ok01.mp3&autoplay=yes&autoreplay=1&bgcolor=FFFFFF&width=200&height=20[/hjp3]

分析Castle.ActiveRecord命名空间涉及到的几个重要接口和抽象类


/*
*Description:分析Castle.ActiveRecord命名空间涉及到的几个重要接口和抽象类
*Auther:天很蓝_崇崇
*MSN:chongchong2008@msn.com
*Dates:2006-05-22
*Copyright:ChongChong2008 YiChang HuBei China
*/

Castle是一个结构极其复杂,功能及其强大的庞大项目,整个工程不亚于.net 2.0 Framework 本身 ,  Castle由多个功能模块组合而成,包括核心模块MicroKernel, Windsor , DynamicProxy以及MonoRail , ActiveRecord , NHibernate , Logger , Model等等,ActiveRecord只是Castle里的一滴小水珠,进一步封装了NHibernate。以下就是对ActiveRecord的简单得不能再简单的分析。


本文就是只介绍Castle.ActiveRecord命名空间涉及到的几个重要接口和抽象类。


[img]http://images.cnblogs.com/cnblogs_com/chongchong2008/53857/r_Castle-001.gif[/img]
[img]http://images.cnblogs.com/cnblogs_com/chongchong2008/53857/r_Castle-002.gif[/img]

IARPaginable , IActiveRecordQuery , ISessionScope
public abstract class ActiveRecordHooksBase
public abstract class ActiveRecordBase : ActiveRecordHooksBase
public abstract class ActiveRecordBaseQuery : IActiveRecordQuery
public abstract class ARPaginableQuery : ActiveRecordBaseQuery, IARPaginable (支持分页的查询)


一 。重要接口分析:

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
IARPaginable , IActiveRecordQuery , ISessionScope
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 1.1 IARPaginable 接口,成员如下:
IEnumerable ListAll();

IEnumerable Paginate(
   int pageSize,
   int currentPage
);

 

 1.2 IActiveRecordQuery 接口,成员如下:
object Execute(
   ISession session
);

 1.3 ISessionScope 接口,成员如下:
ISession GetSession(
   object key
);


bool IsKeyKnown(
   object key
);

 

ISession OpenSession(
   ISessionFactory sessionFactory,
   IInterceptor interceptor
);

void RegisterSession(
   object key,
   ISession session
);

 

 

二。重要抽象类分析

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
public abstract class ActiveRecordHooksBase
public abstract class ActiveRecordBase : ActiveRecordHooksBase
public abstract class ActiveRecordBaseQuery : IActiveRecordQuery
public abstract class ARPaginableQuery : ActiveRecordBaseQuery, IARPaginable (支持分页的查询)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 2.1 ActiveRecordHooksBase类
-----------------------------------------------------------------
类型:抽象类,直接继承自己System.Object.

内部有如下保护可重写虚方法BeforeDelete ,  BeforeLoad ,  BeforeSave 声明如下:

protected internal virtual void BeforeDelete(
   IDictionary adapter
);

protected internal virtual bool BeforeLoad(
   IDictionary adapter
);

protected internal virtual bool BeforeSave(
   IDictionary state
);


public abstract class ActiveRecordHooksBase

 


 2.2 ActiveRecordBase类
----------------------------------------------------------------
类型:抽象类,继承ActiveRecordHooksBase抽象类

保护型静态字段 :
protected internal static ISessionFactoryHolder _holder;

 

拥有父类的所有保护类型可重写虚方法(BeforeDelete ,  BeforeLoad ,  BeforeSave),同时自己加入一个新的内部保护方法Execute,声明如下:
protected internal object Execute( NHibernateDelegate call );


公共可重写的虚方法:
Create , Delete , Save , Update 继承自父类, 声明分别如下

public virtual void Create();
public virtual void Delete();
public virtual void Save();
public virtual void Update();

 


保护型内部静态方法:
Create , Delete , DeleteAll , Execute , ExecuteQuery , FindAll , FindByPrimaryKey , FindFirst , FindOne , Save , SlicedFindAll , Update 其声明分别如下

protected internal static void Create(
   object instance
);

protected internal static void Delete(
   object instance
);


protected internal static void DeleteAll(Type);
protected internal static int DeleteAll(Type,IEnumerable);
protected internal static void DeleteAll(Type,string);


protected internal static object Execute(
   Type targetType,
   NHibernateDelegate call,
   object instance
);


protected internal static object ExecuteQuery(
   IActiveRecordQuery q
);


protected internal static Array FindAll(Type);
protected internal static Array FindAll(Type,params ICriterion[]);
protected internal static Array FindAll(Type,Order[],params ICriterion[]);

protected internal static object FindByPrimaryKey(Type,object);
protected internal static object FindByPrimaryKey(Type,object,bool);


protected internal static object FindFirst(Type,params ICriterion[]);
protected internal static object FindFirst(Type,Order[],params ICriterion[]);

protected internal static object FindOne(
   Type targetType,
   params ICriterion[] criterias
);

protected internal static void Save(
   object instance
);


protected internal static Array SlicedFindAll(Type,int,int,params ICriterion[]);
protected internal static Array SlicedFindAll(Type,int,int,Order[],params ICriterion[]);

protected internal static void Update(
   object instance
);

 

 

 2.3 ActiveRecordBaseQuery类
--------------------------------------------------------------------------------
类型:抽象类,继承IActiveRecordQuery接口

公共属性有 :
public System.Type TargetType {get;}

重要的公共方法:Execute , Clone

抽象方法:
public abstract object Execute(
   ISession session
);

虚方法:
public virtual object Clone();


保护型内部方法:
protected Array GetResultsArray(Type,IList,NullableInt32,bool);
protected Array GetResultsArray(Type,IList,bool);

 

 

 2.4 ARPaginableQuery类
-------------------------------------------------------------------------
类型:抽象类,继承ActiveRecordBaseQuery类并实现IARPaginable接口

构造方法:
public ARPaginableQuery(Type targetType);

保护字段:
protected int currentPage;
protected int pageSize;

 

公共方法:
public object Execute(
   ISession session
);


public IEnumerable ListAll();

public IEnumerable Paginate(
   int pageSize,
   int currentPage
);


保护抽象方法:
protected abstract string BuildHQL();


保护虚方法:
protected virtual IEnumerable ExecuteQuery(
   IQuery q
);


protected virtual void SetQueryParameters(
   IQuery q
);


保护方法:
 

protected Array GetResultsArray(Type,IList,NullableInt32,bool);
protected Array GetResultsArray(Type,IList,bool);

 


全文完..........................................

 

 

 

 

 

 

 

 

 

posted on 2006-05-22 18:16 天真的好蓝啊 阅读(1249) 评论(0)  编辑 收藏 网摘 所属分类: C#.NET





标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-05-23 08:57 编辑过
Google站内搜索

China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!
开发者征途系统新作:《设计模式——基于C#的工程化实现及扩展》

相关文章:

相关链接:
 

My Links

Blog Stats

News

与我联系

搜索

 

常用链接

留言簿(1)

我管理的小组

我参加的小组

我的标签

随笔分类

随笔档案

相册

最新评论

阅读排行榜

评论排行榜

集从人之所长,创造博客社区神话,实现梦想!