【原創作者】:叢興滋(cncxz)[E-mail:cncxz@126.com]
【關 鍵 詞】:SQL XML Access C# 切換
假設你要做個會員管理系統,分為SQL、XML和Access三種版本,希望通過修改設定檔中一個參數來完成版本切換,而目前你又對這種切換的實現存有疑惑,建議你繼續閱讀,本文說明了“一個介面、三個實現、一個代理類結合設定檔實現SQL、XML、Access資料來源切換”的一種方法。
下面以會員管理系統的單位管理為例,說一下這種方法:
1、首先定義一個介面IDeptManage,代碼如下:
//介面IDeptManage
public interface IDeptManage{
void ItemCreate(string strGuid,string strShortName,string strFullName,string strParentGuid);
void ItemRemove(string strGuid);
void ItemUpdate(string strGuid,string strShortName,string strFullName);
string test();//測試用
}
2、然後寫三個互相獨立的實作類別,DeptManage_Sql、DeptManage_Xml、DeptManage_Access,代碼如下:
//類DeptManage_Sql,用SQL的實現
public class DeptManage_Sql:IDeptManage
{
public void ItemCreate(string strGuid,string strShortName,string strFullName,string strParentGuid){
}
public void ItemRemove(string strGuid){
}
public void ItemUpdate(string strGuid,string strShortName,string strFullName){
}
public string test()
{
return "這個是用SQL實現的";
}
}
//類DeptManage_Xml,用XML的實現
public class DeptManage_Xml:IDeptManage
{
public void ItemCreate(string strGuid,string strShortName,string strFullName,string strParentGuid){
}
public void ItemRemove(string strGuid){
}
public void ItemUpdate(string strGuid,string strShortName,string strFullName){
}
public string test()
{
return "這個是用XML實現的";
}
}
//類DeptManage_Access,用Access的實現
public class DeptManage_Access:IDeptManage
{
public void ItemCreate(string strGuid,string strShortName,string strFullName,string strParentGuid){
}
public void ItemRemove(string strGuid){
}
public void ItemUpdate(string strGuid,string strShortName,string strFullName){
}
public string test()
{
return "這個是用Access實現的";
}
}
以前的時候,都是用 IDeptManage myClass=new DeptManage_Sql()跟IDeptManage myClass=new DeptManage_Xml()來實現調用,這在使用中似乎也沒有什麼不妥,可是一旦需要切換(假設要把Sql的換成Xml),就麻煩了,需要到處修改代碼,現在我要做的就是把這些在切換時需要調整的部分集中起來,達到簡單地調整一處代碼就完成切換工作的目的。
3、其實實現起來非常簡單,只要在調用者和調用源中間補上一個中介人實現解耦就可以了,這裡定義一個名為Agent的代理類,代碼如下:
public class Agent
{
static int DataType=0; //資料庫類型[0為SQL、1為XML、2為Access]
public static IDeptManage CreateDeptMange(){
IDeptManage myClass;
switch (DataType){
case 0:
myClass=new DeptManage_Sql();
break;
case 1:
myClass=new DeptManage_Xml();
break;
case 2:
myClass=new DeptManage_Access();
break;
default:
myClass=new DeptManage_Sql();
break;
}
return myClass;
}
}
以後調用的時候改用IDeptManage myManage= Agent.CreateDeptMange()就可以了,想切換的時候修改Agent類中的DataType即可。
修改DataType值,通過調用 myManage.test()可以查看當前使用的哪個實作類別,把Agent類調整一下,從web.config裡讀DataType值,最終就通過一個介面、三個實現、一個代理類結合設定檔實現了SQL、XML、Access資料來源的切換,這裡不寫了,你自己來吧