2008-09-02 50 views
2

我有一種情況,我有一個主窗體彈出一個高級配置窗體,只有六個匹配的複選框和組合框來選擇一些高級選項(複選框啓用/禁用,組合選擇一個媒體,如果啓用)。將大量參數傳遞到配置對話框的最佳方式

如果我只是將檢查和組合框的單獨設置傳遞給對話框的構造函數,顯然有十幾個參數,這似乎有點過分。

我的另一個顯而易見的選擇是,因爲在主窗體中,這些設置存儲在一個大的IDictionary中,其他所有主窗體設置我都可以傳遞這個字典並且隨後用更新後的值取回,但我的理解這是不是真的很好的編碼實踐。

我錯過了一個很好的方法來做到這一點,既高效又好的編碼實踐嗎?

(這個特殊的代碼是C#,但我有一種感覺,一種通用解決方案將適用於其他語言)

回答

6

我個人將創建一個載體對象來存儲值。然後你會得到一個很好的intellisense,並且對它進行更改會非常簡單。它也會比字典查找參數值更快。當然,你會得到類型安全。 :)

0

像這樣的東西應該是不錯的:

MyConfigurationDialog dialog = new MyConfigurationDialog(); 

//Copy the dictionary so that the dialog can't mess with our settings 
dialog.Settings = new Dictionary(existingSettings); 

if(DialogResult.OK == dialog.Show()) { 
    //grab the settings that the dialog may have changed 
    existingSettings["setting1"] = dialog.Settings["setting1"]; 
    existingSettings["setting2"] = dialog.Settings["setting2"]; 
} 
0

我同意羅布·庫珀。創建一個類來表示您的配置,並將其傳遞到窗體的構造函數中。這也可以讓你在你的新的「config」類中定義方法,比如「saveSettings」,「LoadSettings」等等。這反過來會使代碼更易於維護。

作爲一種快速而又髒的替代方法,如果要將這些文件保存到某個文件中,只需傳遞文件名稱,並在運行時讀取表單即可。

第一種選擇確實是IMO的方式。

1

你可以和Rob的解決方案一起去;這對於開發來說是最漂亮的。您的「載體對象」可能包含整個IDictionary,並具有幫助intellisense的鍵入屬性。這些屬性可以更新IDictionary。完成後,您可以將載體對象傳回並直接從中獲取IDictionary。

例如,如果你的字典有鍵/值對「FirstEnabled」 /布爾值,你可以這樣做:

class ContainerObject 
{ 
    public IDictionary<object, object> _dict; 
    public ContainerObject(IDictionary<object, object> dict) 
    { 
     _dict = dict; 
    } 

    public bool FirstEnabled 
    { 
     get { return (bool) _dict["FirstEnabled"]; } 
     set { _dict["FirstEnabled"] = value; } 
    } 
} 

您可以更改成員「_dict」私人或受保護的,並具有存取功能如果你想。

相關問題