Posted on 2006-07-05 20:28
oxl 阅读(177)
评论(0) 编辑 收藏 所属分类:
技术感语
javaeye又出了一贴,是关于这个论题的:http://forum.javaeye.com/viewtopic.php?t=5282
我只是把我的理解说一下:
为什么要把O/R映射得到的Object说为PO呢?对,是的,它是由Hibernate或者iBatis这些ORM中间件生成的持久对象,所以就是PO(废话!),不过你只要仔细回头一想想,也许PO不能只认为是PO,他应该是DO,也就是域对象,拥有对其个体数据进行操作的对象。
我们返回来去想想ORM出现的原因吧。在JDBC时代,我们头痛的是怎样把RDBMS中的记录读取出来映射成我们的域对象,也就是说,我们通过JDBC读取数据,然后生成DO,然后把DO用于整个业务逻辑层,DO代表着实体对象。直到Hibernate这样的中间件的出现,则彻底解决了上述所说的难题,也就是说ORM的任务是把RDBMS数据库中的记录转换成我们域对象DO。
这样问题就演进到DO是否应该提升到View层了。
有人说要用到DTO,也就是数据传输对象,也就是把DTO包装成没有逻辑意义的值对象提交到View层,从而把lazyloading的DO平面化,在大型的分布式J2EE项目中这样是很好的,可是面临一个问题,就是当业务逻辑层返回的是一个集(Set or List)怎么办?唉,没办法,转换它吧(仔细数一下,总共进行了3次循环,在JDBC底层一次,在业务逻辑层一次,在view层一次,而且每一次都是类似的转换一下而已,如果是分布式的,那么这样服务器受到的压力就不会很大)。所以在小型的不存在分布式Java Web中,一般都是把DTO上传到View层(减少一次循环)。
-------------------------
师兄跑去卖家俱去了,哈,一个程序员跑去卖家俱,有趣……
也难说,弄不好我比他还惨,还离奇呢!!