2011-12-06 125 views
0

假設有一個功能需要一個配置設置作爲輸入,但是這個功能被稱爲從頂層'main'功能的幾個層次。設置「深度」配置選項的最佳方式是什麼?

什麼是最好的方式,在最佳編程實踐來看,這種設置傳遞給函數?

一種方法是隻使用一個全局變量,並設置在頂層功能和目標函數讀取它,但我認爲這被認爲是不好的編程習慣。

另一種方法是從上向下通過該設置作爲參數的所有方式,通過幾箇中間函數,一直到最終的目標函數。這似乎非常繁瑣,但也許很容易出錯。

還有其他方法嗎?

您可以使用您所選擇的語言爲你的答案,但僅供參考,我使用C/C++,Perl和Matlab的。

+0

R有一個不錯的'...',可以毫不費力地傳遞下來。 –

+1

爲什麼頂層函數知道一個非常深的嵌套函數需要這些配置選項? – Xeo

+0

「真正的系統沒有頂部」 - Bertrand Meyer –

回答

0

在matlab中,我總是有一個腳本allParam.m,我設置了所有的參數。

如果一個函數需要這些參數中的一個,我只需調用腳本,然後進行設置。

2

讓程序化編程風格留下深層調用堆棧,答案變成平庸。

重塑您的程序以利用現代面向對象的優勢。 Perl roles make for flat hierarchies.配置只是一個屬性。

+0

無論使用哪種編程風格,是否都有一些頂級參數需要被大家使用?在我上面的評論中的例子中,假設您正在運行GSM或CDMA系統的模擬。系統中的所有功能和/或對象都需要被告知這是GSM或CDMA模擬。處理這個問題的最好方法是什麼? – eyio

+0

有可能總是有全局變量的方法,但有些方法可以在沒有它們的情況下完成相同的事情。它們在許多語言中都不是必需的。 –

1

我一起工作的系統使用一個發佈 - 訂閱(Observer模式)實現傳播設置/配置變化需要了解它們的對象。

需要的對象(用戶,或者在original Gang of Four description觀察員)被通知的設定變更:從訂戶

  1. 繼承。
  2. 通過發佈者的附加方法將其自身(訂閱)附加到發佈者。
  3. 每當設置/配置更改發生時都會由發佈者通知。

我們使用variant that allows Subscribers to poll Publishers按需設置/配置數據。

使用發佈 - 訂閱圖案最小化,用於管理設置,並需要它們的對象的對象之間的耦合。

3

我喜歡singleton objects進行配置。這是一個共享資源,應該只有一個實例。當你嘗試創建一個新的對象時,你會得到現有的對象。您不必擔心全局變量或子程序或方法參數。只要獲得一個新的配置對象,只要你需要它就可以使用它。

在四人幫的C++中有一個例子。

+0

該死的。我分心餵養孩子15分鐘,你挖出了答案:) – DVK

相關問題