什么是水合物体?

当有人谈论保湿物品时,这是什么意思?

我在Web上看到一个名为Hydrate的Java项目,它可以在不同表示(RDMS到OOPS到XML)之间转换数据。 这是对象水合的一般意义吗? 在表示之间转换数据? 这是否意味着从存储的表示重构对象层次?

关于更通用的术语水合物

为对象提供水分是将一个存在于内存中的对象,还没有包含任何域数据(“真实”数据),然后用域数据填充(例如从数据库,从networking或文件系统)。

从埃里克·罗伯逊对这个答案的评论:

反序列化==实例化+水化

如果您不需要担心性能下降的问题,而且您也没有debugging数据访问API内部的性能优化,那么您可能不需要明确处理水合。 你通常会使用反序列化,所以你可以写更less的代码。 一些数据访问API不会给你这个选项,在这种情况下,你也必须自己明确地调用水合步骤。

有关Hydration概念的更多细节,请参阅Erick Robertson在同一问题上的回答 。

关于称为水合物的Java项目

你特别问了这个框架,所以我研究了一下。

尽我所知,我不认为这个项目在一个非常普遍的意义上使用了“水合物”一词。 我把它看作是“序列化”的近似同义词。 如上所述,这种用法并不完全准确:

请参阅: http : //en.wikipedia.org/wiki/Serialization

将数据结构或对象状态转换为可以在相同或另一个计算机环境中存储和重构的格式。

我无法直接在Hydrate FAQ上find他们名字背后的原因,但是我得到了他们意图的线索。 我认为他们select了“Hydrate”这个名字,因为这个库的目的与stream行的类似于Hibernate的框架类似,但是它的devise思路完全相反。

包括Hibernate在内的大多数ORM都采用内存中面向对象模型的方法,数据库则需要考虑。 Hydrate库改为采用面向数据库模式的方法,保留关系数据结构并让程序更加干净地工作。

隐喻地说,还是就这个图书馆的名字来说: 水合物就像“做一些可以使用的东西”(比如重新水合干燥食品 )。 这与Hibernate的隐喻相反,更像是“冬天放些东西”(比如动物冬眠 )。

据我所知,决定命名图书馆水合物,并不关心通用计算机程序术语“水合物”。

当使用通用计算机编程术语“水合物”时,性能优化通常是动机(或debugging现有的优化)。 即使库支持对数据填充对象的时间和方式进行精细控制,时间和性能似乎不是名称或库function的主要动机。 图书馆似乎更关心启用端到端映射和模式保存。

水合是指用数据填充物体的过程。 还没有被水合的对象已经被实例化并且表示具有数据的实体,但是数据尚未被加载到对象中。 这是出于性能原因而完成的。

另外,在讨论从数据库或其他数据源加载数据的计划时使用术语水合作用。 这里有些例子:

你可以说,当你只加载了一些字段的时候,一个对象是部分水合的,但不是全部。 可以这样做,因为这些其他字段对于您当前的操作不是必需的。 所以没有理由浪费带宽和CPU周期加载,传输和设置这些数据,当它不被使用时。

另外,还有一些ORM,例如Doctrine,它们在实例化的时候不会保存对象,而只是在对象中访问数据的时候。 这是一种有助于不加载不会被使用的数据的方法。

虽然Merlyn提到的有点多余的白话,但是根据我的经验,它只是指填充/填充一个对象,而不是实例化/创build它,所以当你需要精确的时候它是一个有用的词。