【问题标题】:Are there any general patterns for designing classes for schemaless databases in .NET?在 .NET 中为无模式数据库设计类是否有任何通用模式?
【发布时间】:2012-03-24 12:19:19
【问题描述】:

我在 C# 中使用 mongoDB 做了一些工作,但我的所有代码仍在开发中。我想知道随着时间的推移,随着新属性的创建、更改和删除,人们发现了哪些有用的模式来发展他们的域类。我很清楚,我需要对所有存储的数据运行更新,或者确保我的域类知道如何处理旧格式记录,但随着时间的推移,我可以想象如果一个类知道如何处理,这会变得混乱所有可能的表单格式。

我是不是想太多了?这主要是使用良好的防御性编程的一个案例吗?

【问题讨论】:

  • 相当新的主题,好问题.. 但可能属于programmers.stackexchange.com,因为它在本质上更具概念性,而不是要解决的普通“问题”。

标签: c# nosql schemaless


【解决方案1】:
  1. 向数据对象添加新属性再简单不过了。你刚才 添加它们。除非您担心这些属性为空 存在于数据库中的对象,您无需执行任何操作 别的。如果某些用户/机器使用旧版本的 应用程序和您的课程被标记为 BsonIgnoreExtraElementsAttribute,他们甚至可能不需要更新 他们的软件。
  2. 删除过时的属性再简单不过了。你 只需在您的课程中删除它们即可。如果您的课程标有 BsonIgnoreExtraElementsAttribute,那么你甚至不必删除 它们在您的数据库中(例如,如果您的用户有几个 您的应用程序的版本)。
  3. 重命名类属性也很容易。 BsonElementAttribute 构造函数有一个参数,因此您可以将其映射到数据库中正确的属性名称。
  4. 更改属性类型可能需要您在您的 数据。但说真的,您多久更改一次属性类型 在生产中将字符串转换为 int?

因此,在许多情况下,您甚至不需要对数据运行更新(除非您更改数据类型或您的属性会影响索引)。另一点是添加 BsonIgnoreExtraElementsAttribute 通常是一种很好的做法,特别是如果您担心经常添加和/或删除属性。按照这种做法,您可以提供旧版本和新版本的应用程序来处理所有版本的记录,享受“无模式”的好处。

【讨论】:

  • 我也有同样的想法,但担心不会那么容易。很高兴听到它似乎是。
猜你喜欢
  • 1970-01-01
  • 2011-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多