首先我们必须明确,为什么使用Hibernate?我看很多人没有明白,包括一些专业的论坛,Hibernate是为了让我们更方便地以对象化思维来分析系统。这句话怎么理解?这个意思里面有个纠正错误的隐含意思,纠正什么错误,为什么要强调以对象化思维来分析系统,难道我们以前不是用或者说不方便用对象化思维来分析系统吗?
是的,以前我们以数据库关系数据来分析系统,所以本例子就是一个明显实例。
那么以对象化和以数据库两种思维方式有什么区别呢?有本质的不同,这里暂时不谈很多理论知识,就以本例为说明。
首先,数据库逻辑图是平面的,而对象化(面向模型)分析设计是立体的,那么平面和立体有什么区别?因为是平面的,也就是所有的、无论大小的关系都会展现出来,最后关系复杂,阻碍我们抓住重点,妨碍进一步详细分析。
本图中evaluate_process几乎和所有表有关系,而evaluate_process又有自己的实体Data,所以,evaluate_process是个关系+实体的东西,使用数据库逻辑图表示出来,我们看出这个系统混乱,无从下手。
要使用好Hibernate,首先需要拿出类图 class diagram, 用类图四种关系(依赖 关联 继承 实现)来表示他们之间关系。在用UML类图表示后,evaluate_process会分分解,甚至不出现在类图中,而隐含在类关系中了,重而整个类图简洁,易于执行,再使用Hiberante进行对象到数据表的转换就水到渠成。
所以使用Hiberante的次序是:用对象化思路画好UML类图--->设计数据库--->配置Hibernate映射。
而本例只给出技术终端实现,没有很好地抓住源头和本质,必然会带来系统的失败,或者是体现在中间层DTO/VO的混乱上。
ValueObject和DTO模式的一些疑问