我創建一個實用工具類CommonDaoOperations
包含幾個通用的方法:Create
,Update
,Delete
。 這不是基類,因爲一些DAO更復雜,不能使用這些通用方法,但是很多DAO可以。實用工具類:靜態類VS成員變量VS局部變量
我現在琢磨的是utiliy類應該怎麼樣子正是:
- 僅有靜態泛型方法
- 普通班與通用方法,每個DAO創建一次私人只讀成員靜態類
- 使用泛型方法的常規類,每個DAO方法創建一次(在每個調用中)
爲每個DAO /方法創建一個類的實例顯然花費了超過調用一個靜態方法,但我敢肯定,這些成本幾乎可以忽略任何應用程序。
我贊成,因爲非靜態類的好處的解決方案2或3(接口,可以嘲笑,可以得出/增強,可能在未來通過構造函數參數收集如果有必要(相比靜態類中的10參數方法))。
所以我想真正的問題是:我應該創建我的工具類作爲成員變量,或實例化它每個DAO方法?
public void Create(User user) {
new CommonDaoOperations().Create(user);
}
public void Delete(User user) {
var daoOps = new CommonDaoOperations();
daoOps.CheckSomething(); // just an example of multiple calls to the class
daoOps.Delete(user);
}
我有興趣聽聽其他開發者去想任何這些方法,或者如果還是有問題再/更好的方式來做到這一點。
編輯
就意識到,我應該給的方法#3更多的思考 - 因爲瓦迪姆指出,更換時,它在每個方法的實例化的具體類會很麻煩,但我可以因素,在一個屬性:
private CommonDaoOperations DaoOps {
get { return new CommonDaoOperations(); }
}
public void Create(User user) {
DaoOps.Create(user);
}
我相信這是比上面的代碼片段更maintianable,但是知道我介紹了一個屬性在我的DAO一個「工具」類,這可能是本身就是一個代碼的氣味(如螞蟻p指向出)。
摘要
這是一個艱難的決定 - 而我接受了螞蟻P中的答案,瓦迪姆的回答也是合法的。使用哪種方法取決於效用類別所有3種方法都有其用途(更新後的#3除外)。至少這是我提供的答案。
- 靜態類確實有其用途,但也有許多缺點如上面簡要提到的。
- 常規類,按每個方法實例化: utiliy類創建並在需要的地方使用。減少依賴性,保持你的類型純粹。
- 常規類,實例化爲成員:當許多/所有方法需要實用程序類的實例時,創建成員變量可能是一個更好的主意。這種方式更改類型或實例化方式變得更容易。
你的'工具類'不應該是DAO的成員。 '靜態'看起來很好。 –