zoukankan      html  css  js  c++  java
  • pojo,javabean,entity,domain,dto,ejb区别

    在网上搜索过所有名词的定义后,我总结了下面这张表

    应该把java中一些对象缩写都说明白了 

    2018.04.21

    pojo,javabean,ejb的概念很好理解,就是复杂程度逐渐上升而已.

    domain是个比较虚的概念,只要是一个范围概念,都可以用domian来括住

    vo,dto,po,entity的内容容量逐渐上升,vo是界面显示的数据,dto是从po中抽取的数据,po是数据库中的记录,entity是对象对应数据库中的记录

    dao对象是数据库操作的集合

    bo综合多个po对应一个对象,比如一个简历,有教育经历、工作经历、  关系等等。教育经历对应一个po,工作经历对应一个po,关系对应一个po,

    这三个综合起来就是一个简历,对应一个bo,

    诸多java对象缩写的定义和作用,区别与联系 
    类型 定义 作用 其他
    pojo (Plain Ordinary Java Object)简单的Java对象 普通JavaBeans,有时可以作为VO(value-object)或DTO(Data Transfer Object)来使用  
    javabean 为写成JavaBean,类必须是具体和公共的,并且具有无参数的构造器。  简单的就是pojo,复杂的就是ejb  
    ejb EJB(Enterprise JavaBean),定义用于开发基于组件的企业多重应用程序标准 java的核心代码,分别是回话Bean(Session Bean)、实体Bean(Entity Bean)、和消息驱动Bean(MessageDriven Bean)  
    domain  domain是范围,界线,也被用来批一个变量的有效作用域  也常用这个词做一个包,然后在里面放些DAO类文件.   net.baidu.domain.AddUserDao  
    dto 数据传输对象(Data Transfer Object),是一种设计模式之间传输数据的对象 数据传输目标往往是数据访问对象从数据库中检索数据,从PO中取值进行传输  
    entity 实体bean,一般是用于ORM对象关系映射 一个实体映射成一张表,一般无业务逻辑代码。  
    po persistant object持久对象  最形象的理解就是一个PO就是数据库中的一条记录,如hibernate中的一个持久化对象  
    vo ViewObject表现层对象  主要对应界面显示的数据对象。对于一个WEB页面,用一个VO对象对应整个界面的值。  
    dao data access object数据访问对象 主要用来封装对数据库的访问,包含了各种数据库的操作方法。通过它可以把POJO持久化为PO,用PO组装出来VO、DTO  
    bo  business object业务对象  主要作用是把业务逻辑封装为一个对象。这个对象可以包括一个或多个其它的对象。  

    BObusiness object业务对象

    主要作用是把业务逻辑封装为一个对象。这个对象可以包括一个或多个其它的对象。比如一个简历,有教育经历、工作经历、  关系等等。
    我们可以把教育经历对应一个PO,工作经历对应一个PO,  关系对应一个PO。
    建立一个对应简历的BO对象处理简历,每个BO包含这些PO。这样处理业务逻辑时,我们就可以针对BO去处理。

    DTO :Data Transfer Object数据传输对象,主要用于远程调用等需要大量传输对象的地方。
    比如我们一张表有100个字段,那么对应的PO就有100个属性。但是我们界面上只要显示10个字段,
    客户端用WEB service来获取数据,没有必要把整个PO对象传递到客户端,
    这时我们就可以用只有这10个属性的DTO来传递结果到客户端,这样也不会暴露服务端表结构.到达客户端以后,如果用这个对象来对应界面显示,那此时它的身份就转为VO

      
      VO、PO、FormBean之间的区别:

    VO是独立的Java Object;而PO是Hibernate纳入其实体容器(Entity Map)的对象。

    PO代表了与数据库中某条记录相对应的Hibernata实体,PO的变化在事务提交时将反映到实际的数据库中。

    FormBean只是HTML中表单的封装,是为了弱化request中存储数据的作用,将request对象的get()方法转化为对象的存取值。 
       
        VO和PO在结构上看,没什么区别。但从本质上看是完全不同的。 
       
      VO由new关键字创建,由GC回收。PO则是向数据库中添加新数据时创建,删除数据库中数据时删除,并且它只能存活在一个数据库连接中,断开连接即被销毁。 
       
      VO是业务对象,由业务逻辑使用,它存活的目的就是为数据提供一个生存的地方。PO则是数据对象的表现,它可以简化对象数据与物理数据的转换。 
       
      VO的属性根据当前的业务不同而不同。PO的属性则是跟数据库表的字段一一对应。PO对象需要实现序列化接口。 


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

    PO:持久对象 (persistent object),po(persistent object)就是在Object/Relation Mapping框架中的Entity,po的每个属性基本上都对应数据库表里面的某个字段。完全是一个符合Java Bean规范的纯Java对象,没有增加别的属性和方法。持久对象是由insert数据库创建,由数据库delete删除的。基本上持久对象生命周期和数据库密切相关。


    VO:值对象(Value Object),通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据而已。但应是抽象出的业务对象,可以和表对应,也可以不,这根据业务的需要。

    表现层对象(View Object),主要对应展示界面显示的数据对象,用一个VO对象来封装整个界面展示所需要的对象数据。


    BO:业务对象层的缩写(Business Object),封装业务逻辑的java对象,通过调用DAO方法,结合PO,VO进行业务操作。具体可以看网上的一个例子:

    比如一个简历,有教育经历、工作经历、社会关系等等。
    我们可以把教育经历对应一个PO,工作经历对应一个PO,社会关系对应一个PO。
    建立一个对应简历的BO对象处理简历,每个BO包含这些PO。
    这样处理业务逻辑时,我们就可以针对BO去处理。


    DTO:数据传输对象(Data Transfer Object),是一种设计模式之间传输数据的软件应用系统。数据传输目标往往是数据访问对象从数据库中检索数据。数据传输对象与数据交互对象或数据访问对象之间的差异是一个以不具有任何行为除了存储和检索的数据(访问和存取器)。简单来说,当我们需要一个对象10个字段的内容,但这个对象总共有20个字段,我们不需要把整个PO对象全部字段传输到客户端,而是可以用DTO重新封装,传递到客户端。此时,如果这个对象用来对应界面的展现,就叫VO。


    JavaBean:一种可重用组件,即“一次性编写,任何地方执行,任何地方重用”。满足三个条件①类必须是具体的和公共的②具有无参构造器③提供一致性设计模式的公共方法将内部域暴露成员属性。

    主要用途:可以用在 功能、处理、值、数据库访问和JSP中任何可以用Java代码创造的对象。

    有两种:一种是有用户界面(UI,User Interface)的JavaBean;还有一种是没有用户界面,主要负责处理事务(如数据运算,操纵数据库)的JavaBean。JSP通常访问的是后一种JavaBean。

    分类:通常有Session bean,Entity bean,MessageDrivenBean三大类

    ——Session bean会话构件,是短暂的对象,运行在服务器上,并执行一些应用逻辑处理,它由客户端应用程序建立,其数据需要自己来管理。分为无状态和有状态两种。
    ——Entity bean实体构件,是持久对象,可以被其他对象调用。在建立时指定一个唯一标示的标识,并允许客户程序,根据实体bean标识来定位beans实例。多个实体可以并发访问实体bean,事务间的协调由容器来完成。
    ——MessageDriven Bean消息构件,是专门用来处理JMS(Java Message System)消息的规范(EIB2.0)。JMS是一种与厂商无关的API,用来访问消息收发系统,并提供了与厂商无关的访问方法,以此来访问消息收发服务。JMS客户机可以用来发送消息而不必等待回应。

    JavaBeans:JavaBeans 从狭义来说,指的是 JavaBeans 规范也就是位于 java.beans 包中的一组 API。从广义上来说,JavaBeans 指的是 API 集合,比如 Enterprise JavaBeans。 


    POJO:POJO(Plain Ordinary Java Object)简单的Java对象,实际就是普通JavaBeans,是为了避免和EJB混淆所创造的简称。通指没有使用Entity Beans的普通java对象,可以把POJO作为支持业务逻辑的协助类。

    POJO实质上可以理解为简单的实体类,顾名思义POJO类的作用是方便程序员使用数据库中的数据表,对于广大的程序员,可以很方便的将POJO类当做对象来进行使用,当然也是可以方便的调用其get,set方法。POJO类也给我们在struts框架中的配置带来了很大的方便。
    一个POJO持久化以后就是PO
    直接用它传递、传递过程中就是DTO
    直接用来对应表示层就是VO

    DAO: 数据访问对象是第一个面向对象的数据库接口,是一个数据访问接口(Data Access Object)。它可以把POJO持久化为PO,用PO组装出来VO、DTO。
    DAO模式是标准的J2EE设计模式之一.开发人员使用这个模式把底层的数据访问操作和上层的商务逻辑分开.一个典型的DAO实现有下列几个组件:
    1. 一个DAO工厂类;
    2. 一个DAO接口;
    3. 一个实现DAO接口的具体类;
    4. 数据传递对象(有些时候叫做值对象).
    具体的DAO类包含了从特定的数据源访问数据的逻辑,一般一个DAO类和一张表对应,每个操作要和事务关联。
     
     
     

    POCO (Plain Old CLR Object)源自Java EE编程领域的POJO概念(2000年由Martin Fowler提出)和POTS (Plain Old Telephone Service)概念。POCO被应用于面向.NET框架的CLR (Common Language Runtime, 公共语言运行时)。但是POCO本身不依赖于外部框架,它是PLAIN的。

    POCO的优点:

    • 简单数据存储机制,简化层间数据传递和序列化。
    • 可用于依赖注入和仓库(Repository)模式。
    • 减少对其它逻辑层的依赖和复杂性,实现松耦合(较高的逻辑层需要考虑POCO,POCO不关心其它任何事物)。
    • 通过简化实现可测试性。

    POCO是计算机领域限定名词。

    Entity是实体,代表以自身存在,实际的或潜在的、具体的或抽象的、物理的或非物理的。Entity是非计算机领域限定名词,所以有时会有Data Entity或POCO Entity。

    Model是数学逻辑名词,包括有限操作的集合以及定义于其上的关系,主要用于分析、设计过程。

    DTO (Data Transfer object)是数据传输实体,用于在进程间传递数据。其概念从进程间通讯到本地与远程接口(如Web服务)的通讯,每次调用都是很消耗资源和性能的操作。

    DTO与BO或者DAO的区别是DTO没有任何行为(方法),只是存储和提供它所拥有数据的查询(访问器和修改器)。DTO是简单对象,不包含任何需要测试的业务逻辑。

    DTO模式经常被错误地用于远程接口调用以外的场景,实际上是错误的,这意味着进程内层间调用使用的对象是不应该被称为DTO的。

    应用中的所有实体(Entity)都是业务对象(Business Object),但并不是所有业务对象都是实体。业务对象(Business Object)包括包含方法的实体对象(Entity Object)和不包含方法的值对象(Value Object)。

    业务实体(Business Entity)封装了高阶逻辑需要的业务逻辑或业务规则。它使用实体字段进行裁决或者在必要时修改并进行实体的序列化。

    领域对象/实体/类型(Domain Object/Entity/Class)包含复杂的业务逻辑。描述了多条件下不同的行为逻辑和业务规则。领域实体与业务实体无大致区别,谈到领域实体多数情况是因其复杂的逻辑和规则。

    持久化对象/实体/类型(Persistent Object/Entity/Class)主要是为了将数据保存到内存或数据库中的载体类型。

    实体对象辨析(POCO、Entity、Model、DTO、BO、DO、PO)

  • 相关阅读:
    Sql日期时间格式转换;取年 月 日,函数:DateName()、DATEPART()
    @@ROWCOUNT (Transact-SQL)
    C#调用存储过程简单完整例子
    C# Ajax 手机发送短信验证码 校验验证码 菜鸟级别实现方法
    C#反射技术的简单操作(读取和设置类的属性)
    .NET调用Java写的WebService
    蓝牙错误提示
    sql开启xp_cmdshell
    网页手机宽度
    对称加密算法比较
  • 原文地址:https://www.cnblogs.com/difs/p/8903446.html
Copyright © 2011-2022 走看看