现在流行的web框架多如牛毛,随之而来的讨论也是与日俱增。说说 我们项目采用的架构[Struts + Spring + Hibernate ](目前很流行的一种架构选择),之前在网上有些人讨论,关于VO 与 PO 的问题(也许你们的名字有些不同,但意思一样),<o:p></o:p>
这里所谓的VO:指用于表现层的相对于PO的数据传输对象<o:p></o:p>
这里所谓的PO:指用于持久层的,和数据库对应的数据传说对象。<o:p></o:p>
<o:p> </o:p>
我在之前写过一篇"DTO模型带来的好处"文章,其中就介绍了,我们在写程序的时候应该分层,毕竟我们的目标就是低耦合高内聚呀。然后在不同的架构中,他更有不同的需要,在应用hibernate的项目中,对于vo和po是不是可以以一个对象的身份取代2者的回答是,不可以,绝对不可以。为什么这样说呢,因为,Hibernate有它自己的持久层用法;<o:p></o:p>
有状态的javabean,也就是这个对象在hibernate自己的session已被记录<o:p></o:p>
比如说<o:p></o:p>
GradeChangePO po = (GradeChangePO)getObject(GradeChangePO.class,oid);<o:p></o:p>
我们通过这中或是其他方式从数据库中,获得一个持久层对象,表面看起来就是一个javabean,但其实,它是有状态的,这一点很重要,如果在代码中,因为某些需要,改变了po的属性值,比如 po.setName("test"); 那么即使就这样结束了这个方法,那么它也会自动更新该po所对应数据库记录。甚至不需要我们显示调用saveOrUpdateObject(po);就可以更新。如果你用的从数据库中获取的po,然后po.setOid(....);如果我们在调用 gradeChangeDAO.deleteObject(poObject);时就会提示你正在删除session中已存在的对象具有不同oid对象异常。<o:p></o:p>
<o:p> </o:p>
所以,这种情况下,分层更加重要,通常的是<o:p></o:p>
action 层 /service 层 / dao层 ; 我要应该把和数据库的交互以都放在dao中,把一些业务及逻辑上的处理放在service中,<o:p></o:p>
至于po或vo的装换 如果其他的地方也需要最好单独封装一个转换类,如果其他地方不需要,在dao中写一个回调方法或内部私有类也不错。<o:p></o:p>
这样我们业务操作的总是vo,不会影响到po,然后再需要提交数据时将其转换为po(这个po通常是new出来的,没有状态),显示提交。<o:p></o:p>
<o:p></o:p>
分享到:
相关推荐
本文将详细介绍VO (View Object)、DTO (Data Transfer Object)、BO (Business Object)、ORM (Object Relational Mapping)、DAO (Data Access Object)、Entity (实体)、DO (Data Object)、PO (Persistent Object)、...
Java开发中,PO(Persistant Object)、VO(Value Object)、BO(Business Object)、DAO(Data Access Object)和POJO(Plain Old Java Object)是常见的五个概念,它们在软件设计和开发中扮演着不同的角色。...
与PO不同,VO更侧重于表示层的数据展示需求,其结构可能根据不同的展示要求而变化,更加灵活。例如,在Web应用中,VO常被用于构建页面展示所需的数据格式。 ### DAO(Data Access Object) DAO,数据访问对象,是...
- **VO(ValueObject, POJO, TO, PO)类**: VO类用于数据传输和封装,确保不同层之间传递的对象是对象而非原始数据类型。VO类应遵循一定的规范,如与表名一致,实现Serializable接口以支持序列化,使用包装类代替...
在现代软件开发中,尤其是在Java、PO、VO框架的背景下,这一设计理念显得尤为重要。 #### 多层应用数据传递的挑战与机遇 在未采用统一框架的情况下,不同项目组往往采用各自的设计风格和编码习惯,导致项目计划流...
PO是持久对象,与数据库表对应,而VO用于业务逻辑层和表示层之间的数据传递。 - **V层**:视图层,使用JSP、JQuery、Ajax和JQuery EasyUI组件展示数据,支持HTML5,适应多种浏览器。 - **C层**:控制器层,进一步...
* 项目体系分层: cn.itcast.elec.containner:自定义的spring容器,用于在控制层调用操作业务层 cn.itcast.elec.dao:项目的dao层,负责连接数据库的操作 cn.itcast.elec.daomain:封装实体对象(PO对象),对应...
5. **PO(Plain Old Java Object)、DTO(Data Transfer Object)、BO(Business Object)、VO(Value Object)**:这些是面向对象设计中的特定类类型,用于不同层次之间的数据交换和处理: - PO:普通的Java对象,...
1、能通过表名、列名、列类型、表和列的注释等信息,自动生成PO类、Hibernate、VO类、struts+spring+hibernate的配置文件、Jsp文件、使用说明等文档,以实现对单表的增、删、改、查的操作。生成的代码非常规范,...
5. **持久对象(PO)、值对象(VO)、域对象(DO)**:PO是数据库中的数据对象在应用层的映射,VO通常用于在不同层之间传递数据,不包含任何业务逻辑,DO是包含业务逻辑和状态的对象。 6. **ORM的优点和工具**:ORM简化了...
在传统的MVC架构中,我们通常将业务逻辑分层设计,先设计表结构,然后编写业务逻辑。但是,这种方式存在一些问题,例如业务边界模糊、逻辑补充堆积到了代码层等。DDD架构的出现解决了这些问题,通过划分业务边界,...
本工具主要提供了以下功能: 1、能通过表名、列名、列类型、表和列的注释等信息,自动生成PO类、Hibernate、VO类、struts+spring+hibernate的配置文件、Jsp文件、使用说明等文档,以实现对单表的增、删、...
例如,PO(Persistent Object)层就是用于将领域对象转化为数据库中的持久化对象,如ORM(对象关系映射)框架。视图对象(View Object,如VO)则是用于在展示层中传递数据的对象,它们通常用于界面渲染。 分层架构...
而类名应该使用UpperCamelCase风格,除了一些特定的类型如DO(Data Object)、BO(Business Object)、DTO(Data Transfer Object)、VO(Value Object)、AO(Application Object)、PO(Persistent Object)、UID...
- **类名规范**: 类名应遵循`UpperCamelCase`风格,但特定类型如DO(Data Object)、BO(Business Object)、DTO(Data Transfer Object)、VO(View Object)、AO(Application Object)、PO(Persistence Object)...