VO对象和PO对象的区别
2017-01-05 11:48
399 查看
VO,值对象(Value Object),PO,持久对象(Persisent Object),它们是由一组属性和属性的get和set方法组成。从结构上看,它们并没有什么不同的地方。但从其意义和本质上来看是完全不同的。 1.VO是用new关键字创建,由GC回收的。 PO则是向数据库中添加新数据时创建,删除数据库中数据时削除的。并且它只能存活在一个数据库连接中,断开连接即被销毁。 2.VO是值对象,精确点讲它是业务对象,是存活在业务层的,是业务逻辑使用的,它存活的目的就是为数据提供一个生存的地方。 PO则是有状态的,每个属性代表其当前的状态。它是物理数据的对象表示。使用它,可以使我们的程序与物理数据解耦,并且可以简化对象数据与物理数据之间的转换。 3.VO的属性是根据当前业务的不同而不同的,也就是说,它的每一个属性都一一对应当前业务逻辑所需要的数据的名称。 PO的属性是跟数据库表的字段一一对应的。 PO对象需要实现序列化接口。 VO是独立的Java Object。 PO是由hibernate纳入其实体容器(Entity Map)的对象,它代表了与数据库中某条记录对应的Hibernate实体,PO的变化在事务提交时将反应到实际数据库中。如果一个PO与Session对应的实体容器中分离(如Session关闭后的PO),那么此时,它又会变成一个VO。 由Hibernate VO和Hibernate PO的概念,又引申出一些系统层次设计方面的问题。如在传统的MVC架构中,位于Model层的PO,是否允许被传递到其他层面。由于PO的更新最终将被映射到实际数据库中,如果PO在其他层面(如View层)发生了变动,那么可能会对Model 层造成意想不到的破坏。 因此,一般而言,应该避免直接PO传递到系统中的其他层面,一种解决办法是,通过一个VO,通过属性复制使其具备与PO相同属性值,并以其为传输媒质(实际上,这个VO被用作Data Transfer Object,即所谓的DTO),将此VO传递给其他层面以实现必须的数据传送。
相关文章推荐
- Pagination using AngularJS (with filtering)
- 操作Cassandra(6)-变更数据捕获(CDC)
- 误删除VMware虚拟机vmdk文件的恢复方法
- 创业要避开三大“坑”
- 河中跳房子
- Linux 各目录的作用
- Adobe Flash Player 不是最新版本
- 使用Vuforia SDK搭建AR应用开发环境
- 【LeetCode】66. Plus One
- node中的cmd规范
- 详解SQL盲注测试高级技巧
- 终极图片选择器【转载】
- 【知识必备】RxJava+Retrofit二次封装最佳结合体验,打造懒人封装框架~
- Java多线程Runnable实现方法
- 简单的例子:Java结合图灵机器人开发
- java基于Des对称加密算法实现的加密与解密功能详解
- Unity3D ScriptableObject 简要介绍
- ios Undefined symbols for architecture arm64:错误解决
- android开发 网络请求 java.lang.IllegaIArgumentException.baseUrl must end in /:http://fpush.sayimo.XXXX
- 【已解决】Matlab保存EPS文件时尺寸大小不合适