在系統開發的過程中,我們總是需要使用設定檔來儲存一些我們需要儲存的系統參數, 畢竟這是.Net時代,如果再使用註冊表那就顯得複雜了,畢竟操作註冊表的API並不是哪麼容 易理解的。
所以在.net應用程式中,都預設出現一個App.Config(對於 Web應用程式 是Web.Config)我們可以將系統運行所需要的參數採用加密或者明文的方式儲存在這個檔案 中。但是當我們需要大量的,並且有一定邏輯結構的資料,希望也能夠儲存到設定檔中, 此時我們可能這樣做:將這些資料構造成DataSet,然後使用DataSet.WriteXML直接寫成XML 檔案,讀取的時候直接使用DataSet.LoadXML。另外一種方式就是直接操作XML資料,使用 XmlDocument。
第一種方法雖然是好,因為我們可以想操作資料庫表一樣操作我們的 結構化的資料,可是在某些情況下,總覺得怪怪的。並且增加列等等這些的操作覺得及其難 受。特別是我們需要使用這些資料的時候,我們首先要去讀文檔,瞭解DataSet中的每個表以 及每個欄位的含義,所以此方法不可取。
那第二種方法呢,這個更不可取。如果我們 增加了某個欄位,或者修改了資料的機構,那我們的代碼修改起來是在也是比較複雜的事情 。
那有什麼更好的方式來解決這個問題的呢?
既然微軟可以使用App.Config 和Web.Config,可以使用ComfigManager來對這兩個設定檔來進行管理,讓我們非常方便地 進行使用,那我們為何不可設計自己的ConfigManager呢?
需求:我們這裡以菜單結 構作為例子來描述我們的想法。
菜單,包括主功能表項目,比如系統裡面的“檔案 ”,“編輯”等等,包括子功能表,比如“檔案”下的“保 存”,“另存新檔”等,子功能表下也包括下級子功能表。總之這是一個完全結構 化的資料格式,當然使用菜單來舉例主要是這東西我們每天都見到,所以很容易理解,如:
public class Menu
{
private string _Name;
private string _Text;
private string _IconName;
//...這裡可能還 有其他你需要變數
private SubMenus _SubMenus;
/// <summary>
/// 注意,一定需要一個無參數的建構函式,否則序列化的時候 出錯
/// </summary>
public Menu()
: this ("", "", "")
{ }
public Menu (string name, string text, string iconname)
{
this._Name = name;
this._Text = text;
this._IconName = iconname;
this._SubMenus = new SubMenus();
}
/// <summary>
/// 菜單名
/// </summary>
[XmlAttribute("Name")]
public string Name
{
get { return this._Name; }
set { this._Name = value; }
}
/// <summary>
/// 菜單Text
/// </summary>
[XmlAttribute("Text")]
public string Text
{
get { return this._Text; }
set { this._Text = value; }
}
/// <summary>
/// 菜單的 表徵圖名
/// </summary>
[XmlAttribute ("IconName")]
public string IconName
{
get { return this._IconName; }
set { this._IconName = value; }
}
/// <summary>
/// 子功能表
/// </summary>
public SubMenus SubMenus
{
get { return this._SubMenus; }
set { this._SubMenus = value; }
}
}