java oop思想 - 水合物体意味着什么?



oop概念 java面向对象的特征 (4)

尽管Merlyn提到的这种语言有点多余,但根据我的经验, 它只涉及填充/填充对象,而不是实例化/创建对象,所以在需要精确时它是一个有用的词。

当有人谈论保湿物体时,这意味着什么?

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


关于更通用的术语水合物

为对象提供水分是将存在于内存中的对象包含在内,该对象尚未包含任何域数据(“真实”数据),然后使用域数据填充它(例如从数据库,网络或文件系统)。

从Erick Robertson对这个答案的评论:

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

如果您不需要担心性能下降的问题,而且您也没有调试数据访问API内部的性能优化,那么您可能不需要明确处理水合作用。 你通常会使用deserialization所以你可以写更少的代码。 有些数据访问API不提供此选项,在这些情况下,您还必须自己明确调用水合步骤。

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

关于称为水合物的Java项目

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

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

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

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

我无法直接在Hydrate FAQ上找到他们名字背后的原因,但我得到了他们意图的线索。 我认为他们选择了“Hydrate”这个名称,因为该库的用途与流行的类似Hibernate框架类似,但它的设计思路完全相反。

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

隐喻地说,仍然是关于这个图书馆的名字: 水合物就像“让东西准备好使用”(如重新水合干燥食品 )。 这与Hibernate的隐喻相反,它更像是“冬天放些东西”(比如动物冬眠 )。

就我所知,命名图书馆水合物的决定并不涉及通用计算机编程术语“水合物”。

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


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

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

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

此外,还有一些ORM,比如Doctrine,它们在实例化时不会吸收对象,但只有在该对象中访问数据时才会提供保护。 这是一种有助于不加载不会被使用的数据的方法。


By definition, interfaces cannot have an implementation for any methods, and member variables cannot be initialized.

However, abstract classes can have methods implementated and member variables initialized.

Use abstract classes when you expect changes in your contract, ie, say in future you might need to add a new method.

In this situation, if you decide to use an interface, when the interface is changed to include interface, your application will break when you dumped the new interface dll.

To read in detail, visit difference between abstract class and a interface





java oop