首先解释一下,VO、DTO、DO、PO均是实体类,其性质是一样的,只是因为安全性及其他原因将其划分为了不同的层次。之所以这么划分是因为:假如有一张user表,包含userName、userPassWord、age、position这四个字段。现要展示user表中的信息到页面,密码肯定是不能展示的,但是与表user对应的PO实体类有userPassWord属性,如果全局都用这一个实体类,那么密码字段也会被传到页面,却不被使用。这样一来,传递了无用字段,并且安全性得不到保障。
1. VO:View Object(视图对象,作用于前台页面与表示层之间,将所有的数据封装到一起,比如:表单数据)
VO一般用于封装前端页面传递到Action/Controller的所有参数,这些参数并不一定完全与数据库中表的所有字段均匹配。
2. DTO: Data Transfer Object(数据传输对象,作用于表示层与业务层之间)
Action/Controller将接收到的VO对象进行业务逻辑处理,转化或者构造成DTO对象将其传递给service层
3. DO:Domain Object(领域对象,作用于业务层与dao层之间)
service使用接收到的DTO数据传输对象构造或者重构DO对象,传递到dao层
4. PO:Persistent Object(持久化对象,作用于dao层与数据库交互)
PO对象一般对应着表结构,由DO对象进过持久化得到PO对象(比如,通过orm将其持久化)。转化为持久化对象PO后则可以与数据库进行交互。