`
gatusso52
  • 浏览: 112248 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

PO、VO、FormBean

    博客分类:
  • j2ee
阅读更多

概念:

PO是持久化对象 ,它只是将物理数据实体的一种对象表示,为什么需要它?因为它可以简化我们对于物理实体的了解和耦合,简单地讲,可以简化对象的数据转换为物理数据的编程

VO 是什么?它是值对象,准确地讲,它是业务对象 ,是生活在业务层的,是业务逻辑需要了解,需要使用的,再简单地讲,它是概念模型转换得到的。

FormBean 又是什么?它只是HTML表单的封装 ,是为了在控制层弱化request中存储数据的作用,将request的get方法转变为对象的存取值。

VO与PO的比较:
VO是业务对象 ,由业务逻辑使用,它存活的目的就是为数据提供一个生存的地方。
PO 则是数据对象的表现,它可以简化对象数据与物理数据的转换 。

VO由new关键字创建,由GC回收。
PO则是向数据库中添加新数据时创建,删除数据库中数据时删除,并且它只能存活在一个数据库连接中,断开连接即被销毁。

VO的属性根据当前的业务不同而不同。
PO的属性则是跟数据库表的字段一一对应。PO对象需要实现序列化接口。

 

PO与VO的关系:

首先说PO和VO吧,它们的关系应该是相互独立的,一个VO可以只是PO的部分,也可以是多个PO构成,同样也可以等同于一个PO(当然我是指他们的属性)。正因为这样,PO独立出来,数据持久层也就独立出来了,它不会受到任何业务的干涉。又正因为这样,业务逻辑层也独立开来,它不会受到数据持久层的影响,业务层关心的只是业务逻辑的处理,至于怎么存怎么读交给别人吧!不过,另外一点,如果我们没有使用数据持久层,或者说没有使用hibernate,那么PO和VO也可以是同一个东西,虽然这并不好。

 

VO与FormBean的关系:
其次,让我们看看FormBean和VO,如果简单地讲,我们是可以不需要FormBean的,它只是struts带来的一部分,而VO是无论如何不能舍弃的。如果让FormBean直接到业务层(它本来应该生活在控制层),那么会带来什么?View和Model就出现了强耦合,如果想改一下view的表示,整个业务逻辑都得改,恐怖的事情啊!


我的理解:

       PO对物理数据封装,代管了数据库的操作

then

       PO与VO之间的映射

then

       VO是逻辑业务的数据

then

       VO与FormBean的映射

then

       FormBean面向view,封装了request

 

 

Hibernate中PO有三种状态:
1.未被持久化的VO,此时就是一个内存对象VO,由JVM管理生命周期。
2.已被持久化的PO,并且在Session生命周期内,此时映射数据库连接,由数据库管理生命周期。
3.曾被持久化过,但现在和Session已经托管(detached)了,以VO的身份在运行。它还可以进入另一个Session,继续PO状态管理。
需要注意的是, PO最好只在持久层使用,如果脱离持久层到处使用,会给Hibernate带来不小的PO对象维护开销。



分享到:
评论
1 楼 gatusso52 2009-03-05  
另有一篇文章


那么在一个完整的J2EE系统中应该如何进行合理的设计呢?


1   JSP(View) ---> ActionFormBean(Module) ---> Action(Control)


ActionFormBean是Web层的数据表示,它和HTML页面Form对应,只要Web页面的操作流程发生改变,它就要相应的进行修改,它不应该也不能被传递到业务层和持久层,否则一旦页面修改,会一直牵连到业务层和持久层的大面积的代码进行修改,对于软件的可维护性和可扩展性而言,是一个灾难,Action就是他的边界,到此为止!

2   Action(Web Control) ---> Business Bean ---> DAO ---> ORM --->DB


而PO则是业务层和持久层的数据表示,它在业务层和持久层之间进行流动,他不应该也不能被传递到Web层的View中去,而ActionServlet就是他的边界,到此为止!


我的理解:
1 2 这个流程很经典,学习
不过没有说PO与VO的区别

相关推荐

    json java读取 formbean操作

    本话题将围绕如何在Java中使用这些库来读取JSON数据并进行FormBean的操作进行详细讲解。 首先,我们需要理解FormBean的概念。FormBean是Java Web开发中的一个术语,通常用于封装HTML表单提交的数据,以便在服务器端...

    动态验证formbean

    在Java Web开发中,动态验证FormBean是一种常见的实践,它允许开发者在运行时根据不同的业务需求灵活地定义和改变表单验证规则。本教程将深入探讨动态验证FormBean的概念、优势以及实现方法。 动态验证FormBean的...

    Struts1.2动态FormBean加验证功能的一个例子

    在这个例子中,我们将深入探讨如何在Struts1.2中实现动态FormBean并添加验证功能。 首先,让我们理解什么是动态FormBean。在传统的Struts1应用中,每个ActionForm Bean都是一个Java类,它对应于HTML表单的字段,并...

    结合struts和hibernate谈J2EE架构的数据表示.doc

    VO的作用在于封装业务逻辑所需的数据,它可以是由FormBean转化而来,也可以直接由PO转换得到,但其结构应该符合业务规则,而不是简单地复制Web层或持久层的数据结构。在用户查询信息的例子中,VO可能包含一个全名...

    Struts中FormBean的日期类型字段赋值自动转化

    FormBean是Struts中的一个重要概念,它充当了模型层与视图层之间的桥梁,用于存储用户的输入数据。本篇文章将深入探讨在Struts中FormBean的日期类型字段如何进行赋值以及自动转化。 一、FormBean的概念与作用 ...

    java 经典面试题 于网络分享

    B 在FormBean中可以对页面上传递来的参数进行一下格式上的验证,这种验证是一种客户端的验证 C 用户每次提交表单,都会产生一个新的FormBean实例 D 动态FormBean不能进行验证操作 答案:A 8.以下哪些不是...

    commons-beanutils-1.9.1解析javaBean方式

    Beanutils用了魔术般的反射技术,实现了很多夸张有用的功能,都是C/C++时代不敢想的。无论谁的项目,始终一天都会用得上它。我算是后知后觉了,第一回看到它的...4.5 动态Bean 见用DynaBean减除不必要的VO和FormBean

    FormBeanUtil

    《FormBeanUtil:Java Web开发中的实用工具类》 在Java Web开发中,表单(Form)和Bean(JavaBean)是两个非常重要的概念。表单通常用于收集用户输入的数据,而Bean则作为数据的载体,封装这些数据并提供业务逻辑。...

    struts2 (对象.属性)注入

    此外,这种机制还为与其他框架(如Hibernate)的整合提供了便利,可以将Struts2的VO和Hibernate的PO(Persistent Object)进行整合,进一步提高代码的复用性和系统的整体性能。 综上所述,“对象.属性”注入是...

    struts中数据在action与jsp中的传递总结.pdf

    方式一:通过 FormBean 实现数据传递 在 Struts 中,我们可以通过 FormBean 来实现数据由 HTML 到 Action 之间的传递。FormBean 是一个特殊的 JavaBean,它可以将 HTML 表单中的数据封装起来,并将其传递给 Action...

    Management-System-of-company:项目使用Servlet + mybatis构建的Web项目,目的是为了进一步熟悉mybatis的进一步配置,根据spring的内核编写了FormBean进行使用

    FormBean如下 public class FormBean { public static Object makeBean(HttpServletRequest request,Class<?> clazz){ Object result = null; try { result=clazz.newInstance(); Field [] fields ...

    通向架构师的道路(第二十二天)万能框架spring(四).docx

    Struts2 框架使用 VO 对象来代替传统的 formbean,这使得开发变得更加灵活和方便。VO 对象可以直接用于页面的绑定,减少了开发的复杂度。 4.良好的注入机制 Struts2 框架提供了良好的注入机制,连 session、...

    北大青鸟Y2(Struts)ppt

    在北大青鸟S2阶段的学习中,学员们会接触到 Struts 框架,通过Action、Form、FormBean 和 DispatcherAction 的学习,掌握其核心概念和应用。 **1. Action:** Action 是 Struts 框架中的核心组件,负责处理用户请求...

    Struts的工作原理

    4. **创建FormBean**:如果请求中包含表单数据,ActionServlet会创建一个FormBean实例,将请求参数填充到FormBean中。FormBean通常用来存储用户的输入数据,以便在后续处理中使用。 5. **调用ActionBean**:Action...

    struts面试宝典

    转换成对应的FormBean实例,并填充其属性。 2. 在FormBean中,会调用reset方法,将FormBean的属性恢复到初始状态,确保每次 处理请求前,FormBean处于一个干净的状态。 3. 随后,调用FormBean的setter方法,根据HTTP...

    自己实现struts

    当用户提交表单时,Struts会使用FormBean来存储这些数据,并在业务逻辑处理完成后,可能将FormBean的值回填到页面上。 在`myStruts1`项目中,你可能已经实现了这些核心组件,并通过编写自定义的Action、FormBean和...

    struts入门

    该配置文件定义了一个名为`UserFormBean`的FormBean以及一个名为`RegisterAction`的Action,并关联了该Action与FormBean。 4. **FormBean类**: FormBean类用于封装用户的表单数据。例如,创建一个名为`...

    Struts_config.xml详解

    - 指定FormBean的名称,该名称用来识别当前Action所关联的FormBean。 - **className** - 指定Action类的全限定名,通常为`org.apache.struts.action.ActionMapping`的子类。 - **type** - 指定Action类的类型,...

    全开架图书管理系统图书管理模块struts框架设计以及实现毕业论文.doc

    Struts框架的核心组件包括Action、FormBean、ActionForm、ActionServlet等。 在图书管理系统中,Struts框架可以用于设计和实现图书管理模块。图书管理系统的主要功能包括图书信息管理、借阅管理、读者管理等。...

    Struts html:checkbox框初始默认是选中的解决方法

    在Struts中几种情况可以使标签初始就是选中的,Formbean里面该Property的值设为 1.on 、2.yes 、3.true 这三种情况都是可以实现默认选中的。 注:如果不选中,最好把Property的设置为””,因为在Action中得到...

Global site tag (gtag.js) - Google Analytics