一、基本定义
PO(Persistence Object 持久化对象)是直接跟持久层数据库打交道的java Bean (model,entity,bean等叫法都是能够的),里面除了私有的成员变量以外,就只有其对应的set/get方法,
并且其变量通常跟数据库表中的列几乎(除了名字)同样。
VO(Value Object 值对象)除了能够跟PO彻底同样的变量,set/get方法以外,还能够有其余的变量,可是不用其跟数据库打交道,能够把该对象当作无状态的对象。
二、为何要使用VO,而不直接都用PO代替?
首先PO是持久化类,其属性的改变颇有可能直接致使数据库中的数据变化,而不知道缘由(为何个人数据库中的数据变化了?)。引入了VO以后能够很好
的解决相似的问题,甚至会很好的帮你解决页面(JSP,freemarker,asp,aspx)和控制层的直接便利的交互,而不用担忧其各类属性的变化会不会致使数据库中
数据的变化,这对于使用hibernate以后控制其操做数据时出现的持久化、瞬态、脱管都是有很大好处的。
三、使用VO以后应该注意的问题
使用VO以后要注意其活动范围要控制在service层、controller层、展示层中,而不要进入dao层甚至是数据库(通常也不可能影响到数据库),一样的PO也
只能出如今dao层和数据库(数据库直接和PO交互),而不可以出如今service层、controller层、展示层中。
因此,PO和VO都会出如今service层,并且也会在service中进行适当转换。java