今天寫了端連接數據庫的公用方法,在寫 數據訪問基礎類時,斟酌了下靜態方法和實例方法,其實靜態方法和實例方法是一樣的,在類型第一次被使用時加載。到底用哪個比較好呢?
效率:兩者調用的速度基本上也沒有差別。但是靜態方法不用創建實例就可調用,比較簡單。從面向對象的角度上來說,在抉擇使用實例化方法或靜態方法時,應該根據是否該方法和實例化對象具有邏輯上的相關性,如果是就應該使用實例化對象 反之使用靜態方法。這只是從面向對象角度上來說的。
安全:如果從線程安全、性能、兼容性上來看 也是選用實例化方法為宜。
內存:靜態方法:常駐內存!相當於靜態變量!直到整個系統被銷毀。 非靜態方法:根據需要分配的原則,需要用時 實例化,用完銷毀!所以在並發的情況下,建議使用單件模式比較好!(單件模式 找百度吧!)
( 修正:實例化之后,系統只分配了變量的空間,並沒有給方法也分配不同的空間。方法只與類有關,與實例無關不管有多少實例,方法是由一份拷貝。)
到底如何取舍呢?
從實際項目開發說起,這里有開發項目的三種方式:
開發項目中把BLL和DAL分開,在BLL調用DAL的代碼。
一、在DAL中使用靜態方法,不創建實例直接調用(大概有很多人都使用這種方式開發 )
class DAL
{
public static string GetUserName(...);
}
在BLL中調用:
DAL.GetUserName();
二、在DAL中使用實例方法,采用靜態成員模式(或Singleton)通過實例來調用:
class DAL
{
public static readonly DAL dal = new DAL();
public string GetUserName(...);
}
在BLL中調用:
DAL.dal.GetUserName();
三、在DAL中使用實例方法,每次調用之前先創建DAL對象的實例:
class DAL
{
public string GetUserName(...);
}
在BLL中調用:
DAL dal = new DAL();
dal.GetUserName();
開發方式一:我以為在一些情況下(比如 調用多個數據庫、GetUserName(...)內部處理操作部分)會出現線程安全的嫌疑。這種開發方式不用New出對象,所以很普遍。
開發方式二:應該多是應用在cs模式下,DAL在整個項目只會有一個對象存在,如果出現在B/S 我想不能兼容多種問題情況。而且也有線程安全的問題。
開發方式三:應該是普遍使用的,能夠兼容各種問題,也不會有線程不安全的嫌疑出現。
具體的 大家自己根據實際情況取舍吧!