DAO/PO/VO/POJO/DTO的概念 (转载)

dilipy 2011-02-14

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

PO:persistant object持久对象

          多个记录可以用PO的集合,即为BO。PO中应该不包含任何对数据库的操作。

 最形象的理解就是一个PO就是数据库中的一条记录。       好处是可以把一条记录作为一个对象处理,可以方便的转为其它对象。

VO :value object值对象

ViewObject表现层对象

        主要对应界面显示的数据对象。对于一个WEB页面,或者SWT、SWING的一个界面,用一个VO对象对应整个界面的值。

POJO:简单的Java对象(Plain Old Java Objects)实际就是普通JavaBeans,使用POJO名称是为了避免和EJB混淆起来, 而且简称比较直接. 其中有一些属性及其getter setter方法的类,有时可以作为value object或dto(Data Transform Object)来使用.当然,如果你有一个简单的运算属性也是可以的,但不允许有业务方法,也不能携带有connection之类的方法。

     例如:public class User {

    private long id;

    private String name;

publicvoidsetId(longid){

this.id=id;

    }  

publicvoidsetName(Stringname){

this.name=name;

    }

publiclonggetId(){

returnid;

   }  

publicStringgetName(){

returnname;

   }

       }

DAO:Data Access Object数据访问接口。

       数据访问:故名思义就是与数据库打交道。夹在业务逻辑与数据库资源中间。

DAO的功能:

       1.       DAO用来封装Data Source。

       比如,Connection conn = DAOFacotry.createConnection()就可以把Driver. URL. username, passpword这 一些放在DAO中。以后要更改数据库的类型.比如要把MSSQL换成Oracle的话,只需要更改DAOFacory里面的getConnection()里面的Driver.URL.之类的。

2.         2、 DAO也是把对数据库的操作(比如最基本的CRUD操作)全部封装在里面。

          比如说你要你要插入一个新的用户..那么.在DAO中我们只需要提供一个insertUser(User user)这一个方法就可以了..具体的操作是在DAO中实现的...那么对于要调用DAO的时候.我们只要知道insertUser(User)是用来插入一个新的用户...而不需要知道是如何实现的。

PO与POJO的区别:

           持久对象实际上必须对应数据库中的entity,所以和POJO有所区别。比如说POJO是由new创建,由GC回收。但是持久对象是insert数据库创建,由数据库delete删除的。基本上持久对象生命周期和数据库密切相关。另外持久对象往往只能存在一个数据库Connection之中,Connnection关闭以后,持久对象就不存在了,而POJO只要不被GC回收,总是存在的。

          由于存在诸多差别,因此持久对象PO(Persistent Object)在代码上肯定和POJO不同,起码PO相对于POJO会增加一些用来管理数据库entity状态的属性和方法。而ORM追求的目标就是要PO在使用上尽量和POJO一致,对于程序员来说,他们可以把PO当做POJO来用,而感觉不到PO的存在。

相关推荐