目前我有一個單身人士(服務定位器)的事情發生在我通過像Services.getSettings().get("my.setting");
之類的東西得到我的設置。像這樣的調用在任何可能需要的設置值的地方圍繞代碼寬泛地散佈。它很好用,但我不禁感到它不是這樣做的「正確」方式(最棘手的一點是所有事物都與這個全局對象耦合)。在整個應用程序中訪問設置的方式會更好一些(就「最佳實踐」而言)?萬一它有幫助,我不是在談論Web應用程序。我在談論獨立應用程序,無論是服務器端的桌面。呵呵,它是用Java編寫的,因爲我知道你會問......不過這應該不重要,因爲我在尋找概念而不是具體的實現。訪問應用程序內部設置的首選方式是什麼?
回答
如果只要應用程序正在運行,my.setting
的值就會保持不變,我想將該值存儲在常量中。
private static final String MY_SETTING =
Services.getSettings().get("my.setting");
並使用MY_SETTING
該類別中的任何地方。您可能需要相應地更改訪問修飾符。
這只是使用什麼,而不是如何使用它。 – 2011-03-01 12:01:41
它回答了兩個*什麼*和*如何* – 2011-03-01 12:06:47
你說得對,我非常抱歉,我讀了「屬性」,而不是「偏好」。抱歉。 – 2011-03-01 12:11:31
如果使用依賴注入,你可以在目標對象注入的值。否則,這是一個很好的做法。
在過去,我已經將我的(java)應用程序中各種類的設置在XML文件中進行了外部化,並且我使用了「控制反轉(IoC)容器」(Spring Framework)來注入它們。我覺得這種方法非常有用,因爲它有助於外化對象依賴關係。
你注入了什麼,只是「my.setting」本身或Settings對象的值,以便該類可以在閒暇時訪問所有設置(也允許在每個get()之間更改設置) ? – 2011-03-01 12:08:34
我更喜歡僅注入特定類所需的那些值。舉一個例子,如果我有一個'PrintServer'類需要訪問文件夾('String')中的資源,那麼我會注入表示文件夾路徑的'String'值。將這個值暴露給其他不關心它的類是沒有意義的。 – MarcoS 2011-03-01 13:24:34
會員總是
普通的Java Properties 和區域特定的設置有ResourceBundle
這些也可以通過注射使用一些DI框架,比如Spring /吉斯等。
這裏再一些教程和例子
- http://download.oracle.com/javase/tutorial/i18n/resbundle/concept.html
- http://download.oracle.com/javase/tutorial/i18n/resbundle/propfile.html
- http://technologiquepanorama.wordpress.com/2009/03/17/how_to_access_properties_file_in-spring/
- http://www.java2s.com/Code/Java/Spring/Spring-Properties.htm
希望幫助
所以你說DI是一種方式,無論你注入什麼(Properties,ResourceBundle,MySettingsClass)? – 2011-03-01 12:06:52
當已經使用DI框架時,它是有意義的,因爲它是一個完美的注入候選項,您甚至可以使用bean屬性保留上下文定義中的設置。但我不會爲了應用程序設置管理的唯一目的而使用DI框架。 – fasseg 2011-03-01 12:09:37
好的。說得通。 – 2011-03-01 12:12:31
在Java中,有Preferences API。這基本上是您的設置服務的標準化版本,它從各種明智的地方加載配置。這可能會改進你目前的工作方式,但它並不會真正改變架構,這似乎是你不滿意的。
在架構術語中,您可能會依賴注入;這是一個關於寫這麼多話題的話題,描述它似乎是徒勞的。這個想法是,一些外部的力量負責加載設置並將它們交給你的類,而不是你的代碼必須伸手拉動它們。依賴注入通常與Web應用程序相關聯,但是完全可以使用它在獨立的應用程序。我認爲這對PicoContainer來說非常簡單;我不知道春天。
- 1. 部署Symfony2應用程序的首選方式是什麼?
- 2. 什麼是驗證從Web應用程序訪問AWS的首選方式
- 3. 如何設置和訪問phonegap應用程序的應用程序首選項?
- 4. 在Windows Mobile應用程序中存儲應用程序設置的首選方法是什麼?
- 5. 設置java應用程序的最佳方式是什麼?
- 6. 在java中加載Web應用程序特定配置和設置的首選方式是什麼
- 7. 在Django中訪問設置信息的首選方法是什麼?
- 8. 在Web應用程序中使用EJB和Servlet的首選方式是什麼?
- 9. 應用程序配置與註冊表? .NET中的首選方法是什麼?
- 10. 退出命令行程序的首選方式是什麼?
- 11. 在可可應用程序中嵌入圖像的首選方式是什麼?
- 12. 在Ruby on Rails 3應用程序中實現設置的首選方式是什麼?
- 13. Javascript:嵌套(內部)類型的首選設計是什麼?
- 14. 首選多個Solr應用程序或單應用程序多內核設置?
- 15. 爲什麼WebConfigurationManager應該是處理與Web應用程序相關的配置文件的首選方式
- 16. 在javascript外殼中訪問「this」的首選方法是什麼?
- 17. 什麼可以訪問「應用程序設置密鑰值」?
- 18. 爲應用程序部署SQLite的設置步驟是什麼?
- 19. 部署Pylons應用程序的最佳方式是什麼?
- 20. 什麼是iOS應用程序的常用/首選的橫向方向?
- 21. 在.NET Windows應用程序中存儲用戶設置的首選方法是什麼?
- 22. RoR中應用程序設置的推薦方法是什麼?
- 23. 什麼是清除浮動內容的首選方式?
- 24. 內部部署的外部應用程序,它們是什麼?
- 25. 什麼是爲一個實體設置外部關係的首選方法?
- 26. 使用量角器設置API應用程序的最佳方式是什麼?
- 27. 爲.NET應用程序存儲用戶設置的最佳方式是什麼?
- 28. 什麼是要訪問一個事務提交或回滾的首選方式?
- 29. 在Polymer應用程序中設置階段特定環境的首選方法是什麼?
- 30. 訪問/設置iOS設置應用程序的全局設置
good ol'Java Properties and ResourceBundles? – fasseg 2011-03-01 11:32:44