2010-09-11 56 views
3

我正在開發一個C#應用程序,其中大部分代碼庫位於C#類庫中。我希望應用程序支持保存和加載基於XML的項目文件,並能夠確定自上次保存以來是否發生了任何修改。C#中基於XML的項目文件的設計模式#

我當前的設計理念是:

  1. 每個需要存儲的設置類實現IXmlSerializable的。

  2. 該應用程序維護IXmlSerializable設置對象的通用列表,並調用ReadXml和WriteXml來保存/加載項目文件。

  3. 存儲設置的每個類還保留一個修改標誌。

  4. 應用程序可以通過枚舉IXmlSerializable對象的通用列表並檢查每個修改標誌來檢查項目是否已被修改。它也可以在保存後清除修改標誌。

這是一個很好的設計嗎? 有沒有更好的? 也許我還需要從IXmlSerializable派生我自己的接口來添加修改標誌?

謝謝,安迪

+0

請注意,我可以使用XML以外的東西,但我認爲我的基本設計模式將保持不變。使用讀取函數,寫入函數和修改標誌創建接口,然後使用這些對象的通用列表。 – Andy 2010-09-11 19:49:36

回答

2

我認爲你要去的概念是健全的。我只有一個擔心,這可能是我閱讀你的措辭。

這聽起來像你期望不執行WriteXml方法,如果沒有設置實例修改標誌。如果我理解正確,我認爲你會發現結果文件將不包含未修改的設置。 XmlSerialization是全部或全部,它不能更新文件的某些部分。

所以我認爲你的標誌對於確定你是否需要保存是有用的,但是如果你確定你需要保存數據,你需要保存整個結構。在這種情況下,不需要在每個類上實現IXmlSerializable,除非您有一些自定義的序列化需求,否則無法解決。

+0

那就是如果你一次序列化整個對象樹,對嗎? – 2010-09-11 20:21:51

+0

是的,我的意圖是將修改後的標誌組合在一起,然後確定整個項目是否需要保存。感謝您指出這一點。 – Andy 2010-09-11 20:27:14

+0

@Caspar,這是正確的。我假設(希望?)序列化全部到一個XML文件。要單獨編寫圖的一部分將意味着使用多個XmlSerializer,每個根類型要寫入其中一個,這將導致一個非良好形式的XML文檔。除非有一些技巧我在這裏失蹤。 – 2010-09-11 20:29:59