2011-10-14 39 views
1

我正在開發可用於Android,Web和桌面應用程序的Java庫。該庫由幾個主要分離的模塊組成,這些模塊共享相同的配置設置(例如'enabled','api key')。如何管理Java庫的內部配置設置?

的配置應該允許在運行時(如API,JMX或SharedPreferemes在Android設備)變化不影響便攜性(例如,沒有數據庫),可測試性或線程安全的(有些模塊的目標在單獨的線程中運行)。

方法

我目前使用什麼是配置對象我在啓動時創建並傳遞到各個模塊(其本身把它傳遞給子類)。然後每個類將它需要的字段複製到本地字段 - 唯一的問題是:設置無法在運行時更改。

其他的想法:利用

  • 靜態:很難測試
  • 傳遞引用到模塊:線程安全的?

這裏最好的解決方案/最佳實踐是什麼?


UPDATE:只要是明確的,一個模塊並不需要知道,如果更改了的配置,但是應當簡單地直接使用該字段的新值,並從此與它的工作。

+0

我又有自己的想法:通過包裹每個配置領域的ConfigItem 我可以創建一個AndroidConfigItem 一個包裝分別獲得()檢查是否SharedPreferences已經改變想法嗎? – stephanos

+0

我想了一下,看看ehcache的源代碼,看看他們是如何做到的,並得出結論認爲Óscar的概念(觀察者模式)對我來說是最好的方法 – stephanos

回答

1

幾點建議:

  • 不要複製的每個類都需要一個本地標區;總是訪問配置對象的屬性(任何緩存管理都應該在配置對象上完成)
  • 確保沒有任何使用配置對象的類以任何方式直接修改它(通過插入,刪除密鑰或改變其值)
  • 預載你在config對象需要在實例化時
  • 使配置對象的一個​​Singleton,並共享所需要的客戶端之間的信息
  • 提供的配置機制對象來驅逐任何不再有效的緩存條目
  • 使用觀察者圖案保持高速緩存最新
+0

感謝您的建議 - 一個問題,當您說「在需要的客戶中分享「,你的意思是存儲對它的引用? – stephanos

+0

是的,通過這種方式,配置對象的所有客戶端都將看到相同的最新信息 –