C#工廠模式的實現
上午看到一個兄弟的文章,很辛苦的想實現不改代碼只改配置來訪問不同類型的數據庫,自己去實現C#工廠模式。精神可嘉,但是殊不知C#已經自己為不同類型數據庫的訪問做了一個工廠。在這里我就把使用工廠的例子貼出來供不知道的兄弟參考一下,高手們可以忽略了。
首先是配置文件:其中的providerName就是指定的不同數據庫類型
- <connectionStrings>
- <addnameaddname="..."connectionString="..."providerName="System.Data.OleDb"/>
- <addnameaddname="..."connectionString="..."providerName="System.Data.SqlClient"/>
- </connectionStrings>
下面看一下使用工廠的這個類:
- classDataBaseFac
- {
- privateDbConnectioncnn;//抽象類型
- privateDbCommandcmd;//抽象類型
- privateDbProviderFactoryprovider;
- publicDataBaseFac()
- {
- //從配置文件中取出標示數據庫類型的字符串
- stringproviderName=ConfigurationManager.ConnectionStrings[1].ProviderName;
- //根據上一部的結果工廠創建一個對應的實例
- provider=DbProviderFactories.GetFactory(providerName);
- //使用該實例就可以創建對應的connection,command和adapater對象了
- //調試的時候可以看到這幾個對象都變成了相應于數據庫類型的
- cnn=provider.CreateConnection();
- cnn.ConnectionString=ConfigurationManager.ConnectionStrings[1].ConnectionString;
- cmd=provider.CreateCommand();
- cmd.Connection=cnn;
- }
- //執行一次查詢,返回數據表
- publicDataTableExcuteQuery(stringqueryString)
- {
- DataTableresult=newDataTable();
- DbDataAdapteradapter=provider.CreateDataAdapter();
- cmd.CommandType=CommandType.Text;
- cmd.CommandText=queryString;
- adapter.SelectCommand=cmd;
- try
- {
- cnn.Open();
- adapter.Fill(result);
- }
- catch
- {
- result=null;
- }
- finally
- {
- cnn.Close();
- }
- returnresult;
- }
以上只是簡單的應用,并沒有做比較高級的封裝,只供不知道的兄弟參考。
順便說說,上午看到那個兄弟的文章用swith case語句來實現不同的創建connection ,command 和adapater的方法,然后說是C#工廠模式的實現。其實這是完全錯誤的,C#工廠模式的提出就是為了避免這么多swith case造成的麻煩。以后有時間我會把幾個常用的模式的提出原因和應用場合總結一下用C#做幾個例子給不清楚的兄弟貼出來的。
【編輯推薦】