可以說我有一個程序,有大量的配置選項。用戶可以在配置文件中指定它們。我的程序可以解析這個配置文件,但它應該如何內部存儲和傳遞選項?如何設計具有多種配置選項的程序?
在我的情況下,該軟件用於執行科學模擬。大約有200個選項,其中大部分都有理智的默認設置。通常用戶只需指定十幾個。我面臨的困難是如何設計我的內部代碼。許多需要構建的對象取決於許多配置選項。例如,對象可能需要多個路徑(用於存儲數據的位置),某些選項需要傳遞給該對象將調用的算法,以及一些由對象本身直接使用的選項。
這會導致需要構建大量參數的對象。此外,由於我的代碼庫處於非常活躍的開發階段,因此通過調用堆棧並將新的配置選項一直傳遞到需要的地方是一件非常痛苦的事情。
防止這種痛苦的一種方法是擁有一個全局配置對象,可以在代碼的任何地方自由使用。我不特別喜歡這種方法,因爲它會導致函數和類不會採用任何(或只有一個)參數,讀者不明白函數/類處理的是什麼數據。它還防止代碼重用,因爲所有的代碼都依賴於巨大的配置對象。
任何人都可以給我一些關於如何構建這樣的程序的建議嗎?
這裏是我的意思的配置選項傳遞風格的例子:
class A:
def __init__(self, opt_a, opt_b, ..., opt_z):
self.opt_a = opt_a
self.opt_b = opt_b
...
self.opt_z = opt_z
def foo(self, arg):
algo(arg, opt_a, opt_e)
下面是全局配置風格的例子:
class A:
def __init__(self, config):
self.config = config
def foo(self, arg):
algo(arg, config)
的例子是在Python,但我問題代表任何類似的編程語言。
全局配置對象將所有代碼連接在一起。讓程序更加模塊化將會很好。我喜歡@HYRY顯示的解決方案。這似乎是兩全其美。 – qsc