簡體   English   中英

設置“深度”配置選項的最佳方法是什么?

[英]What's the best way to set 'deep' configuration options?

假設有一個功能需要將配置設置作為輸入,但是從頂層“ main”功能開始,該功能被稱為多個層次。

就最佳編程實踐而言,將此設置傳遞給函數的最佳方法是什么?

一種方法是僅使用全局變量並將其設置在頂級函數中,然后在目標函數中讀取它,但是我認為這被認為是不好的編程習慣。

另一種方法是將設置作為參數從頂部一直傳遞到幾個中間函數,一直傳遞到最終目標函數。 盡管這看起來非常乏味,而且可能容易出錯。

還有其他方法嗎?

您可以使用選擇的語言來回答問題,但是僅供參考,我使用的是C / C ++,Perl和Matlab。

我喜歡單例對象進行配置。 它是一個共享資源,只能有一個實例。 當您嘗試創建一個新對象時,您將獲得現有對象。 您不必擔心全局變量,子例程或方法參數。 只需獲取一個新的配置對象並在需要時使用它即可。

C ++的“四人幫”中有一個示例。

留下深層調用堆棧的過程編程風格將使答案變得平庸。

重塑您的程序以利用現代的面向對象的優勢。 Perl角色構成平坦的層次結構。 這樣,配置只是一個屬性。

我使用的系統使用發布-訂閱(觀察者模式)實現將設置/配置更改傳播到需要了解它們的對象。

需要將設置更改通知的對象( 原始“四人組”描述中的“訂戶”或“觀察者”):

  1. 從訂閱服務器繼承。
  2. 通過發布者的Attach方法將自身(訂閱)附加到發布者。
  3. 每當發生設置/配置更改時,發布服務器都會收到通知。

我們使用一種變體,允許訂閱者按需輪詢發布者以獲取設置/配置數據。

使用Publish-Subscribe模式可以最大程度地減少管理設置的對象和需要設置的對象之間的耦合。

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

如果一個函數需要這些參數之一,則只需調用腳本並進行設置即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM