前段时间我参与了使用struts,ibernate的项目,如今项目已经结束,对多层系统的设计有了一些理解.这个项目主要的实现思想和这篇文章---结合struts和hibernate谈j2ee架构的数据表示, 讲述的是一致的.大家可以先浏览一下,我主要想和大家讨论一下vo.
web层的数据表示是formbean,数据来源于html form post
业务层的数据表示是vo
持久层的数据表示是po,其数据来源于数据库,持久层的数据表示例如cmp
一般系统的结构是这样的, action(web control) ---> business bean ---> dao ---> orm --->db ,可以看出vo的作用就是把数据从dao层传递到action中,或者action传递到dao中, 其实就是 formbean ---> vo---> po,或者po---->vo---->formbean. 当然就想robbin说的那样,好多的系统喜欢省掉vo,直接让po传递到formbean,或者在action中new一个po,把po传递到dao中,这样也是可以的, 主要也就是因为hibernate功能强大,po能脱离持久层,像jdo之类的就不可以了,所以在规划系统的时候,必须考虑一个情况是,你的系统以后在维护的时候,是否可能更改持久层产品, 如果可能vo 还是需要的,不然你会修改会很痛苦.
当然省掉vo确实很爽,我们的系统就是这样的,比较方便,不用再去维护一个vo,效率上当然有不小的提高,但是还有个要注意的问题就是数据库的设计, 一般来说在面向对象编程中,数据库应该使用面向对象的思想设计, 但是这个好多的系统设计是做不到的,或者是老系统没法改变. 存在的问题就是表的设计不合理, 就会出现表的字段很多,当然对应的po也就会很大,但有时有些信息并不是表示层所需要的也会传递过去,效率上肯定是受损失的,所以这个时候可以使用vo, vo的大小当然可以按照实际的需要定制,特别是在查询的数据很多的时候,对效率有一定的提高的.
这是我的一点小的体会,希望大家多多讨论.
闽公网安备 35060202000074号