• Java中的各种o


    java的po vo dao dto pojo


    1各个术语的简介

    PO(persistant object)持久对象

    最形象的理解就是一个PO就是数据库中的一条记录.PO是在ORM中出现的概念,就是ORM中的O,将数据库中的数据模型映射成为一个java对象.简单的PO就是对应数据库中某一张表的一个记录,多个记录就用PO的集合来表示.PO中不能包含任何对数据库的操作

    DAO(Data Access Objects)数据访问接口

    顾名思义就是与数据库打交道,加载业务逻辑和数据库资源之间.DAO模式是J2EE的设计模式,实际上是两个模式的组合,即Data Accessor(数据访问者)模式和ACtive Domain Object(领域对象)模式.Data Accessor模式实现了数据访问和业务逻辑的分离;Active Domain Objecet模式时间了业务数据的对象化封装.(高大上的两种模式是啥子O^O)

    BO(Bussiness Object)业务对象

    封装业务逻辑的java对象,我的理解就是我们的service实现.

    POJO(Plain Ordinary Java Object)简单的java对象

    用来表示普通的Java对象,不是JavaBean,EntityBean或者SessionBean.POJO不担当任何的特殊角色,不继承,也不实现其他Java框架的类或者接口.通常只有property的属性和public的getter和setter

    DTO(Data Transfer Object)数据传输对象

    这个概念也是来源于J2EE的设计模式,用于展示层和服务层之间数据传输对象.通过DTO,服务器只会将view层所需要的数据传输给view层,而不需要吧数据库中全部数据都传递给view层.

    VO
    • ViewObject视图对象
      用于MVC的View层,把某个制定页面(或组件)的所有数据封装起来.
    • value object值对象
      用于业务层之间的数据传递.通常是抽象出来的业务对象,可以和表对应,也可以不,根据业务需求来定.

    2常见的一些术语的区别

    VO(ViewObject)与DTO

    在我们日常开发的过程中,很多情况下VO与DTO通常都是一样的,只是一个POJO(简单的java对象).从实现的角度上看,我们完全可以将DTO与VO合并到一起.但是从设计层面来说(好高大上),概念上还是应该存在VO和DTO,因为两者有着本质的区别,DTO代表服务层需要接收的数据和返回的数据,而VO代表展示层需要显示的数据。

    网上举了一个关于男女的例子:
    展示层与服务层交互的时候,通过DTO传给后台的只有为0和1,但是在展示的时候展示层会显示"男""女",我们可以考虑将VO和DTO两个概念合并到一起,不用DTO,直接用VO传递给服务层"男""女",这样也可以实现功能的.但是如果这时候客户要求可以定制风格,可以用"帅哥""美女"来区分性别,这时候显然就不能用VO来完成全部工作了,需要在展示层用两个不同的VO来表示不同的展示形式,而与服务端交互的时候使用DTO来进行数据传输.

    当然上面这个例子的前提是我们没有使用js这样的脚本语言,在web现阶段的开发中,因为js的普遍使用,我们完全可以将VO与DTO合到一起,有js来控制展现形式.但是概念还是要分清楚的,VO只是负责展示,DTO是用来数据传输的.

    DTO与PO

    在很多只设置到单表操作的业务中,PO与DTO通常也是相同的(DTO和VO经常也是相同的,所以VO与PO也是相同的),当数据模型简单,字段较少的时候,服务层也可以直接将PO交给展示层展示.但是字段较多,而展示层又只需要展示很少的字段;或者展示层要展示的数据涉及到多张表,需要多个PO合并到一起的时候,我们需要DTO来进行数据传输.

    PO与POJO

    PO持久对象是ORM框架中的概念,而POJO是java语言中的概念.PO作为一个持久对象,表示数据库中的一条记录,有insert语句创建,有delete语句删除,PO的生命周期与数据库是密切相关的;而POJO作为java中的一个对象,有new创建,由GC回收,显然要比PO朴素的多.另外PO往往只存在于一个数据库Connection之中,Connection关闭以后,持久化对象就不存在了,而POJO只要不被GC回收就会一直存在的.
    想比与POJO,PO起码会多一些用来管理数据库entity状态的属性和方法.但是ORM追求的目标就是让PO在使用上尽量和POJO一直,所以我们在日常使用中PO就可以当成一个POJO使用,区分PO和POJO是hibernate的事情.

    VO与VO(-.-)

    以下纯属个人看法,有异议可以提出来共同探讨一下.
    从MCV框架上看,ViewObject是在view层的数据,只用于view层的处理,与其它层完全没有联系(数据交流是DTO的事情).而ValueObject既然是业务处理之间的数据交互,那么它就是modol层的数据.所以完全不是一个东西嘛~

    3相关链接

    4相关知识

    数据访问者模式?领域对象模式?javaSE 23中设计模式?

  • 相关阅读:
    迁移博客到Github Pages
    局域网传输文件的一点研究
    0CTF 2017 部分Web的某些不一样的思路
    WPScan初体验
    几种语言的CGI编程
    博客园站内短消息XSS
    nc分析代理服务器
    一个PHP混淆后门的分析
    瘟疫公司中国版(Android)手动破解内购
    参加 Tokyo Westerns / MMA CTF 2nd 2016 经验与感悟 TWCTF 2016 WriteUp
  • 原文地址:https://www.cnblogs.com/bigbearche/p/5323588.html
Copyright © 2020-2023  润新知