分析Castle.ActiveRecord命名空間涉及到的幾個重要介面和抽象類別

來源:互聯網
上載者:User

/*
*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);

 

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

 

 

 

 

 

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.