2010-06-21 73 views
1

我們用XML存儲對象。有時我們更新基礎對象,然後我們必須在我們的文件中保存更多數據來表示對象的額外屬性。對象/ XML向後兼容

如何組織/實施一個系統,以確保向後兼容舊版本的文件?

一次查看多個版本時會出現複雜的部分。

Version 1 -> Version 2 -> Version 3 -> Version 4 

我們是否應該編寫四個文件讀取器,每個文件版本一個讀入它的當前最新版本的對象?或者,我們是否應該保留版本1-3的所有舊版本,以便舊讀者可以將數據讀入這些類中,然後使用增量更新器更新1->2,然後2->3,然後,然後3->4

回答

1

當我像這樣增加版本時,我通常會保留舊的閱讀器,只是更新它來寫入新模型。這意味着我只有當前模型處理剩餘的代碼,但我仍然可以讀取舊文件。我會而不是不管你可能做出什麼其他選擇,都要保留舊的類。你想要將代碼中必須瞭解舊版本的地方數量儘可能少(最好是一個)。如果你保留舊的類,那麼任何處理這些類的代碼(即使是從一個公共基礎派生的代碼)也會冒着必須「知道」舊版本的風險,並且會在一段時間後造成不可避免的維護災難。

這是不是萬能藥...所有顯而易見的選項都有問題。一旦你有超過幾個老讀者,更新它們變得非常耗時(並且上帝禁止你將他們需要的一些代碼重構到新的命名空間中,然後必須有效地編輯相同的代碼100次以替換名字)。但是,我通常只是將它用作完全擺脫舊版本的網關 - 如果您決心只爲了向後兼容而閒置幾個舊版本的閱讀器,則可以在每次創建新版本時開始刪除最早的版本,使維護大大減少頭痛。