`
coolwangyu
  • 浏览: 37650 次
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

分层体系之VO与PO

阅读更多

现在流行的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的项目中,对于vopo是不是可以以一个对象的身份取代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>

至于povo的装换 如果其他的地方也需要最好单独封装一个转换类,如果其他地方不需要,在dao中写一个回调方法或内部私有类也不错。<o:p></o:p>

这样我们业务操作的总是vo,不会影响到po,然后再需要提交数据时将其转换为po(这个po通常是new出来的,没有状态),显示提交。<o:p></o:p>


<o:p></o:p>

分享到:
评论

相关推荐

    VO / DTO / BO / ORM DAO entity DO PO/ POJO(分层领域模型规约)整理

    本文将详细介绍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,VO,BO,DAO,POJO)Explained Collection

    Java开发中,PO(Persistant Object)、VO(Value Object)、BO(Business Object)、DAO(Data Access Object)和POJO(Plain Old Java Object)是常见的五个概念,它们在软件设计和开发中扮演着不同的角色。...

    java中的缩写

    与PO不同,VO更侧重于表示层的数据展示需求,其结构可能根据不同的展示要求而变化,更加灵活。例如,在Web应用中,VO常被用于构建页面展示所需的数据格式。 ### DAO(Data Access Object) DAO,数据访问对象,是...

    java完美笔记

    - **VO(ValueObject, POJO, TO, PO)类**: VO类用于数据传输和封装,确保不同层之间传递的对象是对象而非原始数据类型。VO类应遵循一定的规范,如与表名一致,实现Serializable接口以支持序列化,使用包装类代替...

    应用程序框架设计

    在现代软件开发中,尤其是在Java、PO、VO框架的背景下,这一设计理念显得尤为重要。 #### 多层应用数据传递的挑战与机遇 在未采用统一框架的情况下,不同项目组往往采用各自的设计风格和编码习惯,导致项目计划流...

    系统设计及问题.docx

    PO是持久对象,与数据库表对应,而VO用于业务逻辑层和表示层之间的数据传递。 - **V层**:视图层,使用JSP、JQuery、Ajax和JQuery EasyUI组件展示数据,支持HTML5,适应多种浏览器。 - **C层**:控制器层,进一步...

    SSH 项目框架搭建总结

    * 项目体系分层: cn.itcast.elec.containner:自定义的spring容器,用于在控制层调用操作业务层 cn.itcast.elec.dao:项目的dao层,负责连接数据库的操作 cn.itcast.elec.daomain:封装实体对象(PO对象),对应...

    web技术架构

    5. **PO(Plain Old Java Object)、DTO(Data Transfer Object)、BO(Business Object)、VO(Value Object)**:这些是面向对象设计中的特定类类型,用于不同层次之间的数据交换和处理: - PO:普通的Java对象,...

    haivDb4J2ee1.3

     1、能通过表名、列名、列类型、表和列的注释等信息,自动生成PO类、Hibernate、VO类、struts+spring+hibernate的配置文件、Jsp文件、使用说明等文档,以实现对单表的增、删、改、查的操作。生成的代码非常规范,...

    最新J2EE面试题总结

    5. **持久对象(PO)、值对象(VO)、域对象(DO)**:PO是数据库中的数据对象在应用层的映射,VO通常用于在不同层之间传递数据,不包含任何业务逻辑,DO是包含业务逻辑和状态的对象。 6. **ORM的优点和工具**:ORM简化了...

    设计的秘密:DDD落地最佳实践与实战

    在传统的MVC架构中,我们通常将业务逻辑分层设计,先设计表结构,然后编写业务逻辑。但是,这种方式存在一些问题,例如业务边界模糊、逻辑补充堆积到了代码层等。DDD架构的出现解决了这些问题,通过划分业务边界,...

    HaivOra4J2ee工具提供图片

     本工具主要提供了以下功能:  1、能通过表名、列名、列类型、表和列的注释等信息,自动生成PO类、Hibernate、VO类、struts+spring+hibernate的配置文件、Jsp文件、使用说明等文档,以实现对单表的增、删、...

    vsked领域驱动设计1

    例如,PO(Persistent Object)层就是用于将领域对象转化为数据库中的持久化对象,如ORM(对象关系映射)框架。视图对象(View Object,如VO)则是用于在展示层中传递数据的对象,它们通常用于界面渲染。 分层架构...

    Java开发手册.pdf

    而类名应该使用UpperCamelCase风格,除了一些特定的类型如DO(Data Object)、BO(Business Object)、DTO(Data Transfer Object)、VO(Value Object)、AO(Application Object)、PO(Persistent Object)、UID...

    JAVA开发手册.2020.pdf

    - **类名规范**: 类名应遵循`UpperCamelCase`风格,但特定类型如DO(Data Object)、BO(Business Object)、DTO(Data Transfer Object)、VO(View Object)、AO(Application Object)、PO(Persistence Object)...

Global site tag (gtag.js) - Google Analytics