在採用三層架構進行開發的過程中,我們通常會用到工廠。在表示層中通過它來建立不同的業務例項,再
去呼叫方法。假設我們專案中存已下幾層:業務介面層,業務層(實現實務介面),業務工廠層,資料訪
問層,通用方法層,表示層等。如果業務很多,我們定義了很多的不同的介面,在不用泛型的業務工廠類
["dal"];
#region createcategory
///
/// 建立product資料層介面
///
public static maticsoft.idal.products.icategory createcategory()
#endregion
#region createproduct
///
/// 建立product資料層介面
///
public static maticsoft.idal.products.iproduct createproduct()
#endregion
.....
在這種方式下隨著業務介面的增多,我們將在這裡逐步增加對應的方法。
有沒有一種方式能夠實現在業務增多時,不改工廠的結構。
我的做法是這樣的:通過泛型來實現。工廠裡只需乙個方法。既然
例如:public static t createinstance()
string sa_assembclass = (string)
maticsoft.common.globalvariable.classrelation[s_name];
string s_assemblypath = sa_assembclass[0];
string s_classname = sa_assembclass[1];
object obj = assembly.load(s_assemblypath).createinstance(s_assemblypath
+"."+ s_classname);
return (t) obj;
}既然我們在呼叫此方法的時候只是傳入乙個對應的介面型別,那麼如何得到需要實際建立的業務物件呢?
畢竟我們是不能直接例項化乙個介面的。也就是如何得到介面與業務的程式集,以及具體的類之間的關係
,以便我們通過反射來建立具體的物件呢。這時我們可以將這三者的關係儲存在乙個xml檔案或資料庫表
中。例如:
介面1的fullname /對應實現介面1的業務的程式集名稱 /業務類的名稱
maticsoft.idal.products.iproduct /maticsoft.bll.products /products
在我們的工廠方法裡通過得到應的業務的介面全名,我們就可以得到其他兩項,我上面採用的是存在資料
庫表中,查出來後存在通用層的雜湊表中,鍵為fullname,值為乙個陣列string[2].以靜態變數的方法存
在通用層中,這樣就可以避免得復去查資料庫中的表。得到值後再通過反射既可建立例項了某介面的物件
例項。個人感覺很方便,下次再增加業務時,不需要改這個業務工廠了,只需往表中或xml檔案中插入紀
錄就行。
也許你還有更好的方法。
集合和泛型11 泛型委託與泛型事件
委託也可以泛型化,也就是委託也定義自己的型別引數,這樣的委託稱為泛型委託。在使用委託的 中可以給委託指定型別引數的具體型別,而讓泛型委託例項化為具體的委託例項。就像例項化泛型類或呼叫泛型方法一樣。定義乙個泛型委託的語法格式 public private protected delegate 返回型別...
泛型List與非泛型ArrayList
arraylist集合的用處越來越窄了,list static void main string args arraylist的不安全性一目了然,型別不安全,必將導致各種攻擊的產生,static void main string args 相比不安全的arraylist來說,list 的型別安全性使...
泛型 泛型類 泛型方法 泛型擦除
1 是什麼?一種允許我們在不確定引數型別時候使用的型別。例如我不知道a方法應該會傳string還是int,我就用個泛型先佔坑。2 為什麼要用泛型?泛型可以在編譯期自動確定具體型別,檢查型別是否匹配,可以提高 的重用率,減少冗餘編碼。3 泛型與object的區別?像上面說的我不知道方法a的引數型別,其...