当有人谈论为物体补水时,这是什么意思?
我在网上看到一个名为 Hydrate 的 Java 项目,它可以在不同的表示(RDMS 到 OOPS 到 XML)之间转换数据。这是物体水合的一般含义吗?在表示之间转换数据?这是否意味着从存储的表示中重建对象层次结构?
水合对象是获取内存中存在的对象,该对象尚不包含任何域数据(“真实”数据),然后用域数据(例如来自数据库、来自网络或来自文件)填充它系统)。
来自 Erick Robertson 对此答案的评论:
反序列化 == 实例化 + 水合
如果您不需要担心性能问题,并且您没有调试数据访问 API 内部的性能优化,那么您可能不需要显式处理水合。您通常会改用反序列化,这样您就可以编写更少的代码。某些数据访问 API 不提供此选项,在这些情况下,您还必须自己显式调用水合步骤。
您专门询问了这个框架,所以我研究了它。
据我所知,我认为这个项目并没有在非常一般的意义上使用“水合物”这个词。我认为它在标题中的使用是“序列化”的近似同义词。如上所述,这种用法并不完全准确:
见:http ://en.wikipedia.org/wiki/Serialization
将数据结构或对象状态转换为可以存储 […] 并稍后在相同或另一个计算机环境中重建的格式。
我无法直接在Hydrate FAQ上找到他们名字背后的原因,但我得到了他们意图的线索。我认为他们选择了“Hydrate”这个名称,因为该库的目的类似于流行的类似Hibernate 框架,但它的设计考虑了完全相反的工作流程。
大多数 ORM,包括 Hibernate,都采用内存中面向对象模型的方法,而数据库是第二个考虑因素。相反,Hydrate 库采用面向数据库模式的方法,保留您的关系数据结构并让您的程序在它们之上更干净地工作。
打个比方,还是就这个库的名字而言: Hydrate 就像是“让一些东西准备好使用”(就像再水化干粮一样)。它是 Hibernate 的隐喻对立面,更像是“为冬天收拾东西”(如Animal Hibernation)。
据我所知,将库命名为 Hydrate 的决定与通用计算机编程术语“水合物”无关。
当使用通用计算机编程术语“水合物”时,性能优化通常是动机(或调试现有优化)。即使库支持对对象何时以及如何填充数据的精细控制,时间和性能似乎并不是名称或库功能的主要动机。该库似乎更关心启用端到端映射和模式保留。