2011-02-09 117 views
1

如果應用程序必須能夠打開(並且可能保存)最後N個發行版的文件格式,那麼應該如何組織代碼以便更新文件格式非常簡單並且不易出錯?假定文件格式是XML格式的,函數接受要導出的對象並生成要導入的對象。如何爲版本化文件組織導入和導出代碼?

在每個函數名稱的末尾添加一個數字,然後複製/粘貼併爲每個新版本增加數字?這就像在源代碼中維護版本控制函數的多個版本一樣。也許在編譯時做一些魔術?

回答

3

首先,支持導入舊版本比導出要容易得多。這是因爲通常以後的版本是不同的,因爲它們支持更多的功能。因此,保存到舊格式可能意味着數據丟失。因此,我的經驗只是支持跨越十年的多個版本的導入。

XML當然是智能解決方案。它的設計考慮到了這個問題。我關鍵的一點是乾淨的數據模型遵循乾淨的代碼結構。如果新版本添加了功能,並且這些功能通過支持附加標籤來表示,則您根本不必重新編碼處理現有標籤。

現在你可能改變現有標籤的語義,需要重新編碼。解決方案:如果可以避免,請不要這樣做。添加屬性或標記時,請確保定義默認值,然後無縫處理新舊數據文件。

因此,在我看來,你應該能夠避免很多情況下,你真的有不同的代碼來處理不同文件版本中的相同字段。如果發生這種情況,我猜測有「特殊情況」(即軟件生活)。在設計通用解決方案時,您會考慮特定的用例,而這種特殊情況可能無法處理。

總結:通過定義數據模型的升級路徑,您將來可以最有效地證明。

+0

+1:很好解釋。 – 2011-02-09 23:12:52

1

可能需要版本號。

但最好的事情是實際爲您的XML進行設計。並確保XML以直觀和自然的方式構建。否則,您的代碼的當前組織可能會泄漏到XML的結構中,這會使您的產品的未來版本難以閱讀XML。

保存枚舉值時,不要寫入數字,而是寫入可枚舉的名稱。如果某些元素原則上可能會出現多次,但不會出現在當前應用程序中,請將其設計爲XML中的數組。確保您編寫的數字位於問題域中符合邏輯的單位中,而不是您的應用程序現在使用的單位。

在用這種方式編寫的XML中,不應該很難支持XML的舊版本。

編輯:

如果你做太大改動,它可以幫助實現只是一個傳統的數據對象,讀取舊XML。然後,您編寫一個轉換方法,將舊數據模型轉換爲新數據模型。這有助於你重新開始。如果舊的數據模型設計的很糟糕。