2011-03-01 77 views
1

目前我有一個單身人士(服務定位器)的事情發生在我通過像Services.getSettings().get("my.setting");之類的東西得到我的設置。像這樣的調用在任何可能需要的設置值的地方圍繞代碼寬泛地散佈。它很好用,但我不禁感到它不是這樣做的「正確」方式(最棘手的一點是所有事物都與這個全局對象耦合)。在整個應用程序中訪問設置的方式會更好一些(就「最佳實踐」而言)?萬一它有幫助,我不是在談論Web應用程序。我在談論獨立應用程序,無論是服務器端的桌面。呵呵,它是用Java編寫的,因爲我知道你會問......不過這應該不重要,因爲我在尋找概念而不是具體的實現。訪問應用程序內部設置的首選方式是什麼?

+0

good ol'Java Properties and ResourceBundles? – fasseg 2011-03-01 11:32:44

回答

0

如果只要應用程序正在運行,my.setting的值就會保持不變,我想將該值存儲在常量中。

private static final String MY_SETTING = 
    Services.getSettings().get("my.setting"); 

並使用MY_SETTING該類別中的任何地方。您可能需要相應地更改訪問修飾符。

2

的Java桌面應用程序 使用

或者使用下面的文件在某些​​平臺獨立的路徑來保存設置(${user.home}

  • 屬性文件

  • xml文件

+0

這只是使用什麼,而不是如何使用它。 – 2011-03-01 12:01:41

+0

它回答了兩個*什麼*和*如何* – 2011-03-01 12:06:47

+0

你說得對,我非常抱歉,我讀了「屬性」,而不是「偏好」。抱歉。 – 2011-03-01 12:11:31

1

如果使用依賴注入,你可以在目標對象注入的值。否則,這是一個很好的做法。

2

在過去,我已經將我的(java)應用程序中各種類的設置在XML文件中進行了外部化,並且我使用了「控制反轉(IoC)容器」(Spring Framework)來注入它們。我覺得這種方法非常有用,因爲它有助於外化對象依賴關係。

+0

你注入了什麼,只是「my.setting」本身或Settings對象的值,以便該類可以在閒暇時訪問所有設置(也允許在每個get()之間更改設置) ? – 2011-03-01 12:08:34

+0

我更喜歡僅注入特定類所需的那些值。舉一個例子,如果我有一個'PrintServer'類需要訪問文件夾('String')中的資源,那麼我會注入表示文件夾路徑的'String'值。將這個值暴露給其他不關心它的類是沒有意義的。 – MarcoS 2011-03-01 13:24:34

0
+0

所以你說DI是一種方式,無論你注入什麼(Properties,ResourceBundle,MySettingsClass)? – 2011-03-01 12:06:52

+1

當已經使用DI框架時,它是有意義的,因爲它是一個完美的注入候選項,您甚至可以使用bean屬性保留上下文定義中的設置。但我不會爲了應用程序設置管理的唯一目的而使用DI框架。 – fasseg 2011-03-01 12:09:37

+0

好的。說得通。 – 2011-03-01 12:12:31

0

在Java中,有Preferences API。這基本上是您的設置服務的標準化版本,它從各種明智的地方加載配置。這可能會改進你目前的工作方式,但它並不會真正改變架構,這似乎是你不滿意的。

在架構術語中,您可能會依賴注入;這是一個關於寫這麼多話題的話題,描述它似乎是徒勞的。這個想法是,一些外部的力量負責加載設置並將它們交給你的類,而不是你的代碼必須伸手拉動它們。依賴注入通常與Web應用程序相關聯,但是完全可以使用它在獨立的應用程序。我認爲這對PicoContainer來說非常簡單;我不知道春天。

相關問題