2008-12-17 26 views
26

在我到目前爲止的所有項目中,我使用單身模式來訪問整個應用程序中的應用程序配置。最近我看到很多文章都提到不使用單例模式,因爲這種模式並沒有提升可測試性,它也隱藏了組件依賴。 我的問題是存儲應用程序配置的最佳方式是什麼?它可以在整個應用程序中輕鬆訪問,而無需將配置對象全部傳遞給應用程序。用於應用程序配置的單身人士

由於提前

馬杜

回答

21

我認爲應用程序配置爲Singleton模式的一個很好的使用。我傾向於自己使用它,以防止每次我想要訪問配置時重新讀取配置,並且因爲我喜歡強配置配置(即不必每次都轉換非字符串值)。爲了支持可測試性,我通常在一些後門方法中構建一些後門方法 - 也就是說,可以注入一個XML配置,這樣我就可以在我的測試中設置它,並且可以銷燬Singleton,以便在需要時重新創建它。通常這些都是我通過反射訪問的私有方法,以便它們從公共接口中隱藏。

編輯我們生活和學習。雖然我認爲應用程序配置是使用Singleton的少數幾個地方之一,但我不再這樣做。通常,現在,我將使用靜態配置屬性的Lazy<T>支持字段創建接口和標準類實現。這使我可以對每個屬性進行「初始化一次」行爲,並設計更好的可測試性。

+3

+1做了一個例子,人們喜歡創造,如「從一個循環只有一個出口」或「不允許有單身」他們的小規則。我更喜歡務實而不是教條,因爲教條導致人們無法爲自己思考。如果只能有一個X對象,則應該只有一個XConfig對象。 – paxdiablo 2008-12-17 04:38:43

+2

擁有一個配置對象的單個實例是很好的,但它並不能使單個實例更好。在實際的類中使用像特定於測試的方法這樣的黑客並不適合乾淨的代碼或測試。 – ColinD 2008-12-18 22:37:52

1

對於這種特定情況,我會創建一個配置對象並將其傳遞給需要它的人。

由於它是配置,它只能在應用程序的某些部分使用,不一定應該是無所不在的。

但是,如果你沒有使用它們的問題,並且不想測試它那麼難,那麼你應該繼續像現在這樣做。

閱讀有關爲什麼他們認爲有害的討論。我認爲大多數問題都是在單身人士擁有大量資源時纔出現的。

對於應用程序配置,我認爲這將是安全的,保持它的樣子。

5

使用依賴注入將單個配置對象注入到任何需要它的類中。通過這種方式,您可以使用模擬配置進行測試或任何您想要的內容......您並未明確地出去,並獲得需要使用配置文件初始化的內容。通過依賴注入,你不會傳遞任何對象。