/*
*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);
全文完..........................................