2012-03-06 31 views
8

我已經在C#中用mongoDB做了一點工作,但是我的所有代碼仍在開發中。我想知道隨着時間的推移,隨着新屬性的創建,更改和刪除,人們在發展其領域類時發現了哪些有用的模式。我很清楚,我需要對所有存儲的數據運行更新,或者確保我的域名類知道如何處理舊格式的記錄,但是隨着時間的推移,我可以想象如果一個班級知道如何處理,這會變得混亂所有可能的表單格式。.NET中有無模式數據庫類設計的一般模式嗎?

我在想這個嗎?這大多隻是一個使用良好防禦性編程的案例嗎?

+0

相當新的主題,很好的問題..但可能屬於程序員.stackexchange.com,因爲它本質上更概念化,而不是解決一個正常的「問題」。 – NotMe 2012-03-06 23:28:57

回答

2
  1. 向數據對象添加新屬性不是那麼容易。你只需要 添加它們。除非您擔心數據庫中存在的 對象的這些屬性爲空,否則您不必執行其他任何操作 。如果某些用戶/機器使用舊版本的 應用程序,並且您的課程標記爲 BsonIgnoreExtraElementsAttribute,則他們甚至可能甚至不需要更新其軟件 。
  2. 刪除過時的屬性並不容易。你只需在你的課程中刪除它們。如果您的課程標有 BsonIgnoreExtraElementsAttribute,那麼您甚至不需要在數據庫中刪除 它們(例如,您的用戶有幾個 版本的應用程序)。
  3. 重命名類屬性也很容易。 BsonElementAttribute構造函數具有一個參數,因此您可以將其映射到數據庫中正確的屬性名稱。
  4. 更改屬性類型可能會要求您在您的 數據上運行更新。但是,嚴重的是,您在財產生產中將財產類型從 字符串更改爲int的頻率如何?

因此,在許多情況下,甚至不需要對數據運行更新(除非您更改數據類型或您的屬性影響索引)。還有一點是,添加BsonIgnoreExtraElementsAttribute通常是一種很好的做法,特別是如果您擔心經常添加和/或刪除屬性。按照這種做法,您可以提供應用程序的較舊版本和較新版本,以處理所有版本的記錄,享受「無模式」的好處。

+0

我一直在思考,但擔心這不會那麼容易。很高興聽到它似乎是。 – 2012-03-08 15:49:29