前段时间我参与了使用Struts,ibernate的项目,如今项目已经结束,对多层系统的设计有了一些理解.这个项目主要的实现思想和这篇文章---结合struts和hibernate谈J2EE架构的数据表示, 讲述的是一致的.大家可以先浏览一下,我主要想和大家讨论一下VO.

Web层的数据表示是FormBean,数据来源于HTML Form POST
       业务层的数据表示是VO
       持久层的数据表示是PO,其数据来源于数据库,持久层的数据表示例如CMP

一般系统的结构是这样的, Action(Web Control) ---> Business Bean ---> DAO ---> ORM --->DB ,可以看出VO的作用就是把数据从Dao层传递到Action中,或者Action传递到Dao中, 其实就是 FormBean ---> VO---> PO,或者PO---->VO---->FormBean. 当然就想Robbin说的那样,好多的系统喜欢省掉VO,直接让PO传递到FormBean,或者在Action中new一个PO,把PO传递到DAO中,这样也是可以的, 主要也就是因为Hibernate功能强大,PO能脱离持久层,像JDO之类的就不可以了,所以在规划系统的时候,必须考虑一个情况是,你的系统以后在维护的时候,是否可能更改持久层产品, 如果可能VO 还是需要的,不然你会修改会很痛苦.
        当然省掉VO确实很爽,我们的系统就是这样的,比较方便,不用再去维护一个VO,效率上当然有不小的提高,但是还有个要注意的问题就是数据库的设计, 一般来说在面向对象编程中,数据库应该使用面向对象的思想设计, 但是这个好多的系统设计是做不到的,或者是老系统没法改变. 存在的问题就是表的设计不合理, 就会出现表的字段很多,当然对应的PO也就会很大,但有时有些信息并不是表示层所需要的也会传递过去,效率上肯定是受损失的,所以这个时候可以使用VO, VO的大小当然可以按照实际的需要定制,特别是在查询的数据很多的时候,对效率有一定的提高的.

这是我的一点小的体会,希望大家多多讨论.

使用Hibernate的项目中对VO的理解相关推荐

  1. 理解web项目中的VO,DTO,DO,PO

    理解web项目中的VO,DTO,DO,PO 想起第一次实习的时候被嫌弃VO,DTO,DO,PO不分 vo DO DTO PO 想起第一次实习的时候被嫌弃VO,DTO,DO,PO不分 所以他们到底是什么 ...

  2. java web-inf_对JavaWeb项目中WEB-INF目录的理解

    1:WEB-INF目录的位置,位于WebRoot或WebContent目录内,WEB-INF里默认有lib目录和web.xml配置文件. 2:WEB-INF下面的内容只能由服务器级别才能访问,客户端并 ...

  3. map和foreach的区别和应用场景_浅析项目中常用的 VO、DTO、DO、PO的概念、区别和用处...

    概念: 模型: VO与DTO的区别 VO与DTO的应用 DTO与DO的区别 DTO与DO的应用 DO与PO的区别 DO与PO的应用 本篇文章主要讨论一下我们经常会用到的一些对象:VO.DTO.DO和P ...

  4. Spring项目中,为什么要区分PO对象,VO对象,DTO对象?有什么作用?

    相信大家在平时项目中都会用到PO对象,DTO对象,VO对象,但是为什么要区分这几种对象呢?他们分别有什么作用呢? PO对象是指的持久化对象,PO中的字段是和数据库表中的字段一一对应的,一般是DAO层或 ...

  5. hibernate+servlet+mysql 实现easypoi_在Maven项目中使用easypoi完成Excel文件上传下载(示例代码)...

    导包: 1 2 3 cn.afterturn 4 easypoi-base 5 3.2.0 6 7 8 cn.afterturn 9 easypoi-web 10 3.2.0 11 12 13 cn. ...

  6. 项目中技术细节(button用法、前端操作json、 hibernate的query.setFirstResult的用法注意、struts2中日期格式化标签)

    button的用法 struts2 s:iterator 中按钮获得当前行数据,并跳转 <button id="submissionz" onclick="var ...

  7. 【struts2+hibernate+spring项目实战】实现用户登录功能(ssh)

    一.概述 从今天才开始有时间来总结总结以前自己练习的一些东西,希望总结出来对以后可以更加便捷的来学习,也希望可以帮助到正需要这些东西的同行人,一起学习,共同进步. 二. 登录功能总结 2.1.登录功能 ...

  8. 记录第一次在egret项目中使用Puremvc

    这几天跟着另一个前端在做一个小游戏,使用的是egret引擎和puremvc框架,这对于我来说还是个比较大的突破吧,特此记录下. 因为在此项目中真是的用到了mvc及面向对象编程,值得学习 记录第一次在e ...

  9. XML在JAVA项目中的作用

    java项目中,xml文件一般都是用来存储一些配置信息 一般的编程, 多数用来存储配置信息 . 拿JDBC来说,可以把数据库连接字符串写到xml,如果要修改数据源,只需要改xml就可以了,没必要再去重 ...

  10. 【struts2+hibernate+spring项目实战】ajax+jquery报表数据显示(ssh)

    报表页数据显示 本项目中以商品采购信息为例,统计采购指定时间,指定供应商对应的采购报表信息,并以数据加图片的形式展示. 2.基于页面结构,设置采购链接对应的显示信息页面 当前仅制作根据商品名进行报表统 ...

最新文章

  1. 牛!Python 也能实现图像姿态识别溺水行为了!
  2. 硬件巨头正在崛起,中国独占鳌头
  3. mysql9索引实战_课程介绍目录索引
  4. 批量修改多目录下相同文件名的文件内容
  5. 内存四区(代码区 静态区 栈区 堆区)
  6. c语言if语句教学设计,c语言if语句教学设计.pdf
  7. [转]ASP.NET 状态服务 及 session丢失问题解决方案总结
  8. UITableView上的iOS UIRefreshControl
  9. 软工网络15个人作业5--软件工程总结
  10. 《JavaScript征途》广泛征集读后感创作者,参与有奖!
  11. android 进度gif,Android NumberProgressBar:动态移动显示百分比进度的进度条
  12. 计算机考研复试汇总(所有科目)
  13. 快收藏!最适合计算机大学生的Java毕业设计项目--高校食堂点餐系统
  14. linux命令一个减号,linux shell环境减号-的用途
  15. Aseprite动画技巧
  16. HTML/CSS 圆形头像
  17. 环境数据采集系统——中期总结
  18. I.MX6ULL ARM驱动开发---platfrom设备驱动
  19. Android加载PDF文档
  20. C++ 程序编译过程:从代码到程序

热门文章

  1. 这些超好用的 Mac 系统自带软件,来试试
  2. 关于EasyRecovery的一些高级设置
  3. 吴恩达的21节Deeplearning.ai课程学习经验总结
  4. Linux异步IO【转】
  5. SAP的十年豪赌:不成HANA 便成仁
  6. 12月第一周.COM增9.5万 .ASIA和.XXX现负增长
  7. (转)苹果推送通知服务教程 Apple Push Notification Services Tutorial
  8. Http client to POST using multipart/form-data
  9. poj 动态规划总结
  10. Illustrator教程,如何在 Illustrator 中创建和应用图案?