请教Hibernate问题若干

08-05-20 itworker
                   

最近在看夏昕的《深入浅出Hibernate》,有若干问题,向前辈请教
(1)O/R Mapping 还是R/O Mapping,就是E-R建模还是对象建模的问题,毫无疑问,被持久化的应该是对象,数据库表只是一种手段。问题来了,既然我们选择了对象建模,那么按照传统的软件工程理论,数据库设计是在概要设计阶段,而类设计是在详细设计阶段,这样又陷入了数据库设计先行的沼泽了。
(2)Session何时关闭的问题,假如我们现在有3个开发人员分别负责视图层,业务层和持久层。问题来了,如果让session在持久层就被关闭,那么视图层就无法使用hibernate的延迟加载特性了。如果把session的关闭放在一个ServletFilter里控制,虽然视图层可以使用延迟加载特性了,但是Hibernate的代码又侵入了C层了,也就是说,负责写Servlet编写的那个人需要知道持久层的那个人用了Hibernate,换句话了,编写C层的人为了这个ServletFilter得在自己的项目里加入整个Hibernate的jar包。这明显不合理,也不符合软件工程的思想。何时、何地关闭session?这个问题严重。
(3)Hibernate和DAO,书中说并不推荐在使用Hibernate后还使用DAO,这我就不理解了。DAO和Hibernate是不同概念的东东呀,即使用了Hibernate,我也有可能写出很糟糕的代码(比如在业务层里到处混杂Hibernate代码)呀?用DAO不就正是为了让业务和持久层彻底分离么?
(4)暂时没有了,呵呵。

                   

korpton
2008-05-21 10:25

等待高手回复...!

banq
2008-05-21 13:46

>那么按照传统的软件工程理论,数据库设计是在概要设计阶段,而类设计是在详细设计阶段,这样又陷入了数据>库设计先行的沼泽了。

这说明这些软件工程跟不上形势,当然要抛弃,使用Evans DDD等新的agile工程。


>何时、何地关闭session?这个问题严重
这个确实是Hibernate的一个硬伤,侵入了表现层。也是目前技术限制吧。使用对象数据库就没有这个问题。



>书中说并不推荐在使用Hibernate后还使用DAO,DAO和Hibernate是不同概念的东东呀
只有了解Evans DDD这样建模设计后,我们才发现,DAO已经多余,被仓储repository替代,DAO这个概念还停留在以数据为中心时代的语义,使用Hibernate后,我们系统中没有数据概念,只有对象概念,因此DAO这样data acess object显得多余,DAO是一个过渡概念。

hex9
2008-05-22 19:03

嘿嘿,发现自己好象是一个伪技术迷,对什么都不懂,却又要装出很有兴趣的样子。~` 唉,就盼望着有谁提几个低级的问题,让我也回答一下。

hifun
2008-06-01 12:31

LS的很有意思哦.