日期:2014-05-18  浏览次数:20758 次

ssh中vo到底是什么,为什么不能省,在线等
如题,高手详细点说一下,谢谢了

------解决方案--------------------
先给你说说PO,PO(persistant object 持久对象)对象模型反映了对象间的关系,如一对多、多对多、单向双向访问关系等。可以看成是与数据库中的表相映射的java对象。
而VO(value object 值对象) 通常用于业务层之间的数据传递,在WEB应用中,一般用于和前台页面做数据相互。
Struts1.x被2.x代替后VO层消失了,在action中直接传递PO,这样代码显得很简洁,很多SSH应用也都这样做。简单应用完全可以省VO而之久用PO,但还是建议使用VO。原因如下。


在目前的SSH中,若符合JPA规范,那就先设计PO model,再生成数据库。
在struts 2.1.6中使用json格式作为输出,PO对象中包含着复杂的关系,如果又是双向的,很容易出错,为了避免错误,我们又要在PO中打上相应的忽略注解,框架一多,各种注解参杂在PO中,显得很乱,最后都搞不清这些注解到底代表哪个功能。
若使用VO,原先PO中存在的一些字段也可以放入到VO中,PO可完全对应于数据库字段,而把一些需要和前台交互的字段放入VO中,VO中尽量存放简单数据类型。
这样不管是前台使用什么系统(webservice和doNet C#交互,还是使用flex,ajax json等),转换为xml格式也异常简单,制作报表也不用过多的考虑如何解析传递过来的复杂对象和子表嵌套。用户关系的只是workType.name而不是WorkType这个类,VO由业务层产生,传递给视图层或其它各种接口。这样可以使得层次间进一步解耦,PO对象模型也变得容易维护(少了很多注解,代码清晰)。也使得前端数据结构的变得更轻(VO都是简单数据类型),有利于传输和解析。

有点长。好好体会一下吧。