今天在看《spring技术内幕》,第一章中多次提到了使用POJO来完成开发,就百度了一下,在此保留

1.     什么是POJO

POJO的名称有多种,pure old java object 、plain ordinary java object 等。

按照Martin Fowler的解释是“Plain Old Java Object”,从字面上翻译为“纯洁老式的java对象”,但大家都使用“简单java对象”来称呼它。

POJO的内在含义是指那些没有从任何类继承、也没有实现任何接口,更没有被其它框架侵入的java对象。

POCO的概念是从java的POJO借用而来,而两者的含义是一致的,不同的仅仅是使用的语言不一样。所以POCO的解释就是“Plain Old C# Object”。

2.     为什么会有POJO?

主要是Java的开发者被EJB的繁杂搞怕了,大家经过反思,又回归“纯洁老式”的JavaBean,即有无参构造函数,每个字段都有getter和setter的java类。

3.     POJO的意义

POJO让开发者可专注于业务逻辑和脱离框架的单元测试。除此之外, 由于POJO并不须要继承框架的类或实现其接口,开发者能够极其灵活地搭建继承结构和建造应用。

POJO的意义就在于它的简单而灵活性,因为它的简单和灵活,使得POJO能够任意扩展,从而胜任多个场合,也就让一个模型贯穿多个层成为现实。

先写一个核心POJO,然后实现业务逻辑接口和持久化接口,就成了Domain Model; UI需要使用时,就实现数据绑定接口,变成VO(View Object)。

4.     POJO与PO、VO的区别

POJO是指简单java对象(Plain Old Java Objects、pure old java object 或者 plain ordinary java object)。

PO是指持久对象(persistant object持久对象)。

VO是指值对象或者View对象(Value Object、View Object)。注意,本文的VO特指View Object。

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

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

5.     POJO的扩展

POJO仅包含最简单的字段属性,没有多余的东西,它本质上就是一个普通的JavaBean。

但是在POJO的基础上,能够扩展出不同的对象。

为POJO增加了持久化的方法(Insert、Update、Delete……)之后,POJO就变成了PO。

为POJO增加了数据绑定功能之后,POJO就变成了View Object,即UI Model。

为POJO增加业务逻辑的方法(比如单据审核、转帐……)之后,POJO就变成了Domain Model。

POJO还可以当作DTO使用。

最新文章

  1. 让MacBook识别noppoo mini 84
  2. 软件工程-构建之法 理解C#一小段程序
  3. 使用html2canvas实现浏览器截图
  4. IP地址数据库-ISP运营商列表(2017年1月)
  5. HashMap的resize和Fail-Fast机制
  6. C#基础----Linq之List<T>篇
  7. Html/Css(新手入门第二篇)
  8. android定位GPS定位 代码实现
  9. android sdk
  10. CentOS常用指令
  11. [v]Debian类系统的有效国内源
  12. mysql命令行导入sql文件
  13. Introduction 引言
  14. canvas 基础知识
  15. SQL中ON和WHERE的区别
  16. 【VMware vSphere】Veeam备份
  17. varchar字数
  18. maven配置环境变量失败解决办法
  19. day31(正则表达式)
  20. x86-64整数寄存器

热门文章

  1. java学习内容整理
  2. C语言中存储类别、链接与内存管理
  3. Linq,拉姆达表达式注意!
  4. Codeforces Beta Round #87 (Div. 2 Only)-Party(DFS找树的深度)
  5. restframework 的一些操作
  6. oracle序列的缓存
  7. mapreduce统计总数
  8. table size script :
  9. python 基础内置函数表及简单介绍
  10. Java基础06-条件选择语句