当有人谈论给对象补水时,这是什么意思?
我在网上看到一个名为Hydrate的Java项目,该项目可以在不同表示形式(RDMS到OOPS到XML)之间转换数据。这是物体水化的一般含义吗?在表示之间转换数据?这是否意味着要从存储的表示形式重建对象层次结构?
最佳答案
关于更通用的术语水合物
对对象进行水合处理是获取内存中存在的,尚未包含任何域数据(“真实”数据)的对象,然后使用域数据(例如从数据库,网络或文件中)填充该对象系统)。
从埃里克·罗伯逊(Erick Robertson)对这个答案的评论:
如果您不必担心性能过高,并且不调试数据访问API内部的性能优化,那么您可能不需要显式处理水合作用。通常,您通常使用deserialization代替,因此您可以编写更少的代码。某些数据访问API并未为您提供此选项,在这种情况下,您还必须自己明确调用水合步骤。
有关水化概念的更多详细信息,请参见关于同一问题的Erick Robertson's answer。
关于the Java project called hydrate
您是专门问这个框架的,所以我调查了一下。
据我所知,我认为这个项目在一般意义上并没有使用“水合”一词。我在标题中看到了它的使用,是“序列化”的近似同义词。如上所述,这种用法并不完全准确:
另请:http://en.wikipedia.org/wiki/Serialization
我无法直接在the Hydrate FAQ上找到他们名字背后的原因,但是我得到了他们意图的线索。我认为他们之所以选择“Hydrate”作为名称,因为该库的用途类似于流行的类似Hibernate framework,但在设计时就考虑到了完全相反的工作流程。
包括Hibernate在内的大多数ORM都采用面向内存的面向对象模型的方法,而数据库则是第二考虑的。相反,Hydrate库采用面向数据库模式的方法,可以保留您的关系数据结构,并使您的程序在它们之上更干净地工作。
隐喻地说,仍然与该库的名称有关:Hydrate就像“制作一些现成的东西”(例如为Dried Foods重新补水)。这是Hibernate的隐喻对立面,它更像是“在冬天丢掉一些东西”(例如Animal Hibernation)。
据我所知,命名库Hydrate的决定与通用的计算机程序术语“hydrate”无关。
当使用通用计算机编程术语“水合物”时,性能优化通常是动机(或调试现有优化)。即使该库支持对对象填充数据的时间和方式进行精细控制,但时间和性能似乎并不是名称或库功能的主要动机。该库似乎更关心启用端到端映射和模式保存。