2010-05-03 99 views
0

我想知道是否應該在類中創建一個輔助函數作爲靜態函數,或者只是將其聲明爲過程函數?輔助函數作爲靜態函數還是過程函數?

我傾向於認爲,一個靜態幫助函數是正確的方式去,因爲然後我可以看到它是什麼樣的幫助函數是例如。 Database :: connect(),File :: create()。

什麼是最佳實踐?

回答

1

IMO它取決於它是什麼類型的輔助函數。靜態/單例會讓事情變得非常難以單獨測試,因爲它們會傳播具體的依賴關係。因此,如果輔助方法是我可能想在單元測試中僞造的東西(並且您創建文件和連接到數據庫的示例肯定會屬於該類別),那麼我只是將它們創建爲常規類中的實例方法。用戶將根據需要實例化助手類以調用方法。

有了這樣的控制/依賴注入/服務定位器模式,您可以更容易地在您想要測試代碼並且想要僞造數據庫訪問或文件系統訪問等情況下使用僞造代碼。

這當然有理論上存在幫助類的多個實例的缺點,但在大多數系統中這不是一個真正的問題。這些實例的開銷很小。

如果輔助方法是很簡單的東西,我會永遠僞造了測試,那麼我可能會考慮使用靜態。

0

Singleton解決了困惑。

MyHelper.Instance.ExecuteMethod(); 

實例將是一個靜態屬性。好處是您可以在調用方法中獲得簡單的一行代碼,並重用以前創建的實例,從而避免在不同內存位置創建實例並處理它們。

+0

但一個靜態函數爲您提供了所有的好處。靜態方法的使用甚至不創建實例。 – 2010-05-03 10:13:34

+0

無論如何,它仍然可以使用內存,然後再使用它。 – IsmailS 2010-05-03 10:44:05