代码之家  ›  专栏  ›  技术社区  ›  Bob Horn

从数据库填充对象-在哪里停止?

  •  1
  • Bob Horn  · 技术社区  · 15 年前

    从数据库中获取对象时,是否还应加载该对象的属性?似乎有这些方法。

    • 创建格式良好、完全加载的对象。

    pro:不需要检查是否已经加载了属性;它已经加载了。传递它,不要担心对象的某些部分不在那里。

    你在哪里停?如果一个对象有一个对象,而该对象有一个对象,并且该对象有40个对象作为属性,等等,您是否加载整个数据库?或者,您是否在BLL中决定什么构成一个格式良好的对象,并加载这些属性?

    • 不要加载任何其他对象的属性。

    专业:快速,不加载不必要的属性。

    con:必须不断地编写代码来检查是否填充了属性。

    • 延迟加载:仅在首次使用属性时加载属性。

    赞成/反对:不知道该怎么说这种方法。这似乎是直觉上的错误。

    还有别的办法吗?最好的方法是什么?

    最后,可以为空的属性是什么?例如,汽车可能没有PreviousOwner对象。是否设置为空?一个空的previousOwner对象?那么这个属性是否属于另一个类?

    1 回复  |  直到 15 年前
        1
  •  1
  •   diciu    15 年前

    对你的问题没有一个简单的答案,因为这取决于你想达到什么样的目标。

    看起来您希望从数据库加载一个或多或少完整的对象图(即多个对象类型与存储在数据库中的对象本身之间的关系)。

    如果是这种情况,我会调查使用 Object Relationship Mapper 这在我选择的语言中很方便。

    至于加载了多少对象图,Apple Coredata的系统使用的模型是:尚未检索到的对象标记为错误(它们称为“错误”概念),如中所述。 Limiting the Size of the Object Graph: Faulting . 这是一个关于你自己描述的懒惰装载概念的游戏。