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