最近在看这个,网上看到很多VO,PO的概念,还是不理解。特来请教。网上的理解:
  概念我就不说了,不清楚的兄弟自己网上找找。关键分歧在于,PO,VO是不同的2个类,其中VO只作为业务层向作为传值使用.我的理解:
  PO,VO我感觉是一个东西,只在hibernate的session内同时在事务内,和数据库行记录对应,即只是同一个东西的状态不同会在不同的阶段不同。总结问题:
 1.PO,VO一般应用场景,特别是VO?
 2.VO的具体应用,在设计时怎么用的?
 3.PO,VO设计成一个类和两个类,实质的不同点在哪里?

解决方案 »

  1.   

    PO,VO指的不是类,而是对象概念..........VO是把PO转变为永远存在的对象,其含义有类似与“证据”.............典型场景:法院的审判...........法院在审判的过程中,都有记录员在记录证词和过程,这是记录的时候,所记录的对象就称为PO........当进入到最后环节,也就是听取审判结果的时候,法院为对所有的PO进行备案,备案也就是保存.......这是也可以说是对案件的全程记录,其记录结果则是永远存在的,我们把这个结果对象称为VO........
      

  2.   

     1.PO,VO一般应用场景,特别是VO?  VO通常作为前台显示使用(ViewObject?) 因为从数据库里取出数据的时候该数据并不一定适合显示到前台页面 必定有个封装的过程 于是就封到VO里了
     2.VO的具体应用,在设计时怎么用的?同上
     3.PO,VO设计成一个类和两个类,实质的不同点在哪里?不同点到没什么 不过需要注意的是 有些时候有一个"状态"的问题 有些人用VO是为了将PO转换为瞬态 写一起也不是不可以 (通过一个转换器切换前台和后台的数据)
      

  3.   


    按你的意思,VO就是FormBean ,但有些系统设计分层时,仍然存在FormBean这层,主要是用于前台数据映射到java对象。 那如果这样子,即FormBean,VO,PO,都存在,那VO又是个什么角色了?
      

  4.   


    不是 我没说VO是FORMBEAN 我现在不知道你说的VO是什么 他的拼写可能是VALUEOBJECT(FORMBEAN?)
    也可能是VIEWOBJECT 而且仔细看我说的第三点 有些时候假设你用HIBERNATE的时候 PO里的值不能乱改的(尤其你用了某些特殊的处理事务的方式) 这样的话就把值从PO里提取出来放到另外一个地方供其他人使用大概吧 我就是这么理解的 可能说错了 但是LZ千万表理解错..
      

  5.   

    VO PO是面向对象思想一种发展概念产生的思想产物VO是视图层传输数据对象。。可以理解为后台向页面传递的数据存储对象。VO并不是指什么FORMBEAN。。你试想一下,如果页面所要展现的数据,需要从不同查询结果进行组装展现。。或者换个简单点的。。表单数据需要从两个集合中取数据展现在同一行记录。。就需要运用VO来存储页面数据
      

  6.   

    1:VO并不是指什么FORMBEAN!我正是把他当formBean来用的.!而且效果还不错!.formBean在struts1 中不正是用来封装数据的吗?这样一来vo当formBean来使我觉得是没有一点问题的!
    [我用的是struts2]更方便!从 po --> vo 的转化能更加的灵活。毕竟po和数据库表长一样。不好使,而且有2楼说的情况!2:表单数据需要从两个集合中取数据展现在同一行记录。。就需要运用VO来存储页面数据!
     同样用po封装一样方便。!
      

  7.   

    呵呵,那我想问下你了。。你对于POJO,,DTO这些东西怎么理解的封装当然好用。。但是你对于这些东西怎么理解的??PO,.VO。。和FORMBEAN根本是两种概念产生的名词。。不是一种思想。。封装肯定好用,属性嘛。。封装到一个类里面,然后取出来,,当然好用。。但问题是,,对于这些东西的理解。。