我正在研究由幾個模塊組成的應用程序,這些模塊又將用於其他應用程序。每個模塊都需要一些配置選項,但不應該意識到其他模塊的選項,也不應該要求其他模塊存在。一些設置在模塊之間共享。將配置傳遞給應用程序不可知模塊的最佳方式是什麼?
可以說模塊A需要設置x和y,模塊B需要設置y和z。
設置存儲在註冊表中或一個或多個.ini文件中。
到目前爲止,我已經考慮了以下方法:
- 有一個全球性單位(「global.pas」) 包含在所有模塊和 包含與 設置全局變量。我不太喜歡這種方法 非常多,因爲它需要 所有應用程序都有這樣一個單位 它必然會收集大量的 附加代碼,這些代碼與 沒有任何關係。所以 最終每個應用程序將 有其自己的不兼容全球 單位。
- 具有包含該模塊所需的所有設置的每個模塊的配置類。這些從應用程序中的某個中心點傳遞到模塊中,該中心還處理讀取和寫入它們的永久形式(例如使用JvAppStorage)。這需要在模塊之間進行一些同步,因爲它們之間會共享某些選項,所以如果在一個模塊中更改了選項,則必須以某種方式在另一個模塊的配置中反映此更改(不一定實時,但下一次模塊被初始化)。
- 有一個傳遞給每個模塊並且包含所有模塊設置爲屬性的通用配置類。每個模塊只訪問它所知道的設置。這裏的問題可能是名稱衝突可能在沒有被發現的情況下發生。另外,我不喜歡在模塊中傳遞配置選項的想法。另外,每個應用程序將包含不同的模塊子集,但最終會包含相同的配置類以及所有可能模塊的選項。 (這與上面的全局單元方法並無太大差別。)
- 有一個傳遞給每個模塊的通用配置類,就像上面一樣。但不是有屬性,模塊通過名稱訪問它們的設置(最簡單的情況下,這可能是一個TCustomIniFile)。這樣可以避免設置所有應用程序中可用的所有模塊,但會引入可能的類型兼容性問題,並且名稱衝突可能成爲一個問題(除非每個模塊在其選項前加上名稱,但不能再共享選項)。
我想每個編寫模塊化系統的人都會遇到這個問題,並且發現他們稍後會遇到一些解決方案,不管他們是否仍然喜歡它們。我也曾去過幾次,我仍然在尋找金色的子彈。
也許別人已經找到了理想的解決方案?
(這是德爾福2007年的情況下,它很重要。我已經使用了JCL/JVCL)