Value Object 和 POJO

我在理解Value Object和 POJO上有点混乱.

Value Object是不是专指放在N层结构的前端,打包客户端输入值的对象用来减少network traffic?

POJO 是不是专指放在N层结构的后端的对象?用来向数据库输送数据的对象?

好象两者内部结构相同。

不同的是用途, value object 是用来提高网络传输效率。
POJO是用来封装存取对象的方法。

POJO是指最最传统的Java对象,和任何模式都无关。Value Object是指某一种特定的设计模式,两者不是一个层次的概念。

我理解“支持POJO"至少包括两层意思是,
1. 简化开发,程序员按照传统的OO方法进行编程,不需要为某个对象设计多个接口或辅助类。例如一个简单的User类,既可以用来做持久化,也可以用来在界面显示,也可以用来传输,不需要再有VO,PO这些概念之分。

2. 打破特定框架的藩篱,最大程度地复用代码。在Java里面,有无数的框架,绝大多数要求你按照某种规范进行编程,实现某个接口,或者继承某个特定类。这种'规范',在该框架内部是有益的,但是如果框架被淘汰,对原有代码的打击也是毁灭性的。
其实,Java里最稳定的框架有一个,就是Java Bean。如果各种Java技术能够在这个层次上集成,对于程序员来说将是最有利的。
Hibernate和Glue WebServices都是这样的技术。

多谢guty!

听过java核心模式中有介绍value object,不过还没空看。

再次感谢!

pojo可以理解为具有纯粹的面向对象思想的java对象,职责和数据结合的很好。
而现在很多开发并没有真正采用面向对象的方式进行开发,比如很多开发j2ee,按照模块划分session bean,entity bean完成数据库表的映射,利用vo传递数据。
但是这两种方法并没有什么好坏的区别,只有针对你的项目好不好用的区别。

pojo更简单,代码复用性高
不过我觉得J2EE的精髓就是定义了container和app对象的一种协议,servlet,portlet,ejb,jmx等都是这样,pojo很完美,但是有的具体实现起来却有很多问题,而且单独javabean模式也有不足,比如简单的没有生命期方法,这样就必须加新的接口。

POJO (Plain Old Java Object)
An object that does not use nor support any other kind of component/bean specification. It does not implement any lifecycle or marker interfaces, it does not provide any kind of metadata. Will usually follow the minimum requirements for classifying it as a JavaBean though.