美文网首页
理解PO,VO,DAO,BO,POJO

理解PO,VO,DAO,BO,POJO

作者: 生亦欢 | 来源:发表于2018-03-12 15:57 被阅读0次

    POJO (Plain Old Java Object)
    这是一个简单的java对象,包含业务逻辑和持久化逻辑的处理。但不是JavaBean、EntityBean等,不具有任何特殊的角色,没有继承,没有实现,没有注解。可以包含get/set方法。

    <--------------------------------------------------->
    POJO中间对象
    POJO=====>PO、DTO、VO
    1 .POJO持久化之后==〉PO
    2 .POJO传输过程中==〉DTO
    3 .POJO用作表示层==〉VO
    个人感觉PO,DTO,VO这些对类的区分是为了更好区分java在一个项目中每个时期的作用。加以区分,以方便后期维护。比如你命名成VO对象,这个时候万一以后需要维护项目就可以准确的知道这个对象只是在表现层用到的,这个时候就不需要去dao层去找。
    <--------------------------------------------------->

    JavaBean
    JavaBean是一个遵循特定写法的Java类,是一种Java语言编写的可重用组件,它的方法命名,构造及行为必须符合特定的约定:
    1、这个类必须具有一个公共的(public)无参构造函数;
    (为什么一定需要一个无参数的构造函数? 通常情况下javaBean是由tomcat容器来创建,这个时候就需要无参数构造函数---->个人理解)
    2、所有属性私有化(private);
    3、私有化的属性必须通过public类型的方法(getter和setter)暴露给其他程序,并且方法的命名也必须遵循一定的命名规范。
    4、这个类应是可序列化的。(比如可以实现Serializable 接口,用于实现bean的持久性)
    (按照这个规范来写的就是javaBean)
    JavaBean 是进程内组件 这个暂时还不懂

    PO
    PO是在O/R映射的时候出现的概念,如果没有O/R映射,没有这个概念存在了。
    1、有时也被称为Data对象,对应数据库中的entity,可以简单认为一个PO对应数据库中的一条记录。
    2、在hibernate持久化框架中与insert/delet操作密切相关。
    3、PO中不应该包含任何对数据库的操作。
    4、PO的属性是跟数据库表的字段一一对应的。
    5、PO对象需要实现序列化接口。
    (PO感觉就是把数据库中的数据转化成java对象的实现的一种方法,用对象来填装数据,那这个对象就是PO---->个人理解)

    DTO
    可以将PO中的部分属性抽取出来,就形成了DTO
    ◇比如我们一张表有100个字段,那么对应的PO就有100个属性。
    但是我们界面上只要显示10个字段,客户端用WEB service来获取数据,没有必要把整个PO对象传递到客户端,这时我们就可以用只有这10个属性的DTO来传递结果到客户端,这样也不会暴露服务端表结构.到达客户端以后,如果用这个对象来对应界面显示,那此时它的身份就转为VO(View Object)。
    ◇用在需要跨进程或远程传输时,它不应该包含业务逻辑。

    VO :value object 值对象 / view object 表现层(视图)对象。
    ◇先说 value object 值对象:
    通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据而已。但应是抽象出的业务对象,可以和表对应,也可以不,这根据业务的需要。个人觉得同DTO(数据传输对象),在web上传递。
    ◇①VO(value object)是值对象,精确点讲它是业务对象,是存活在业务层的,是业务逻辑使用的,它存活的目的就是为数据提供一个生存的地方。VO的属性是根据当前业务的不同而不同的,也就是说,它的每一个属性都一一对应当前业务逻辑所需要的数据的名称。
    VO是什么?它是值对象,准确地讲,它是业务对象,是生活在业务层的,是业务逻辑需要了解,需要使用的,再简单地讲,它是概念模型转换得到的。

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

    ◇② VO(view object)表现层对象,视图对象。
    用一个VO对象对应整个界面的值。
    1、主要对应页面显示(web页面/swt、swing界面)的数据对象。
    2、可以和表对应,也可以不,这根据业务的需要。
    注 :在struts中,用ActionForm做VO,需要做一个转换,因为PO是面向对象的,而ActionForm是和view对应的,要将几个PO要显示的属性合成一个ActionForm,可以使用BeanUtils的copy方法。

    出处 http://blog.csdn.net/chenchunlin526/article/details/69939337

    相关文章

      网友评论

          本文标题:理解PO,VO,DAO,BO,POJO

          本文链接:https://www.haomeiwen.com/subject/jvmnfftx.html