程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> Castle學習筆記----ActiveRecord配置封裝的解決方案

Castle學習筆記----ActiveRecord配置封裝的解決方案

編輯:關於.NET

使用ActiveRecord開發的過程中我想大家都想到過,配置那麼多要是不Ctrl+C/Ctrl+V還得自己去記在腦袋裡,必然雜弄?

無論你是使用Hashtable,ArrayList等集合對象來處理還是使用web.config類配置或是使用XML文件單獨配置,始終你都得記住或是讓你的硬盤幫你記住ActiveRecord的配置串.方便你Ctrl+C/Ctrl+V.

[使用集合對象處理]

Hashtable properties = new Hashtable();
properties.Add("hibernate.connection.driver_class", "NHibernate.Driver.SqlClientDriver");
properties.Add("hibernate.dialect", "NHibernate.Dialect.MsSql2000Dialect");
properties.Ad("hibernate.connection.provider","NHibernate.Connection.DriverConnectionProvider");
properties.Add("hibernate.connection.connection_string", "Data Source=.;
Initial Catalog=test;Integrated Security=SSPI");
InPlaceConfigurationSource source = new InPlaceConfigurationSource();
source.Add(typeof(ActiveRecordBase), properties);

[使用xml配置節]

<activerecord>
<config>
<add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver" />
<add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect" />
<add key="hibernate.connection.provider"
value="NHibernate.Connection.DriverConnectionProvider"/>
<add key="hibernate.connection.connection_string"
value="Data Source=.;Initial Catalog=test;Integrated Security=SSPI" />
</config>
</activerecord>

使用上面這兩種方式是不是都很麻煩,上周我在公司做項目的時候想到去寫一個通用方法來處理ActiveRecord,個人覺得很不錯,把思想寫下來大家分享.

解決方案分析

針對這種情況,我的思路是把配置用方法封裝起來,通過傳遞數據庫名和項目實體數據程序集給方法,具體的實現交給方法封裝方法去搞定,如下示:

因為Castle所支持的不只是MSSQL這一種數據庫,MYSQL,DB2.......也支持,既然是通用方法,那考慮這一點是必要的.這裡我采用了工廠模式,定義抽象類和抽象方法,讓派生類來實現他,通過工廠根據需要調用不同的實現類方法:

1public abstract class Initialize
2{
3 public abstract void ActiveRecordInit(string dataBase,string model);
4}

定義實現類繼承於這個抽象類並重寫基類方法:

1public class ConnectionToSQL : Initialize
2{
3 public override void ActiveRecordInit(string dataBase,string model)
4 {
5 //具體實現這裡不貼代碼,有需要的朋友E-mail我,
6 //或者我給個連接下載
7 }
8}
9public class ConnectionToMySQL : Initialize
10{
11 public override void ActiveRecordInit(string dataBase,string model)
12 {
13 //**********************
14 }
15}

像這樣Castle所支持多少數據庫都可以通過工廠模式的思想來擴展.然後就是工廠的建立了.根據需要返回不同的操作.

根據所傳參數來決定實力化那一個類進行相關的配置:

1public class CastleConfigFactroy
2{
3 public static Initialize CreateInstance(string type)
4 {
5 switch (type)
6 {
7 case "SQL": return new ConnectionToSQL();
8 break;
9 case "MYSQL": return new ConnectionToMySQL();
10 break;
11 default: return new ConnectionToSQL();
12 }
13 }
14}

通過上面這樣的思想處理過後,就可以直接調用方法就可以實現配置了.

1Initialize init=CastleConfigFactroy.CreateInstance("SQL");
2init.ActiveRecordInit();

注意:上面的代碼只是給個思想,真正實現還是有很大的問題,我相信大家也都看出來了.裡面還有很多邏輯都沒寫出.

主要原因是周公在催我了,請大家贖我對文章不負責之錯,實在是沒精神了.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved