POJO与PO、VO的区别
http://www.cnblogs.com/wangjunwei/p/3859360.html
POCO的概念是从java的POJO借用而来,而两者的含义是一致的,不同的仅仅是使用的语言不一样。所以POCO的解释就是“Plain Old C# Object”。
从字面上翻译为“纯洁老式的C#对象对象”,
理解POCO先要理解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使用。
最新文章
- .Net使用RabbitMQ详解
- 安装第三方RPM仓库
- centos 安装 nginx
- VMware: XXX is still busy. Please wait until the operation is complete before closing
- CentOS-6.5-NFS部署
- Android开发如何去除标题栏title(转)
- 大众点评的大数据实践-CSDN.NET
- [转]toString()方法
- Day10 网络编程(续)
- 掌握下面常用函数,学php不再难
- Android中的ScrollTo和ScrollBy解析
- XMLHttpRequest API 使用指南
- 【Java学习笔记之二十三】instanceof运算符的用法小结
- SPOJ1825:Free tour II
- matlab 写文件
- Configuring High Availability and Consistency for Apache Kafka
- 干货分享:互联网运营 学习SEO从零开始 SEO深度解析学习笔记
- Unity3D游戏开发框架-资源管理类ResourceManage
- Linux下的进程类别(内核线程、轻量级进程和用户进程)--Linux进程的管理与调度(四)
- [__NSArrayM insertObject:atIndex:]: object cannot be nil'
热门文章
- 命令:mktemp
- codeforces_1092c
- 使用Runnable接口创建线程
- Android-LayoutAnimation
- Jindent——让intellij idea 像eclipse一样生成模版化的javadoc注释
- 单源最短路模板 + hdu - 2544
- POJ 2546 &;amp; ZOJ 1597 Circular Area(求两圆相交的面积 模板)
- HappyJTAG2 - JTAG AND SPI AVR8 interface EMBEDDED JTAG ! EMBEDDED SPI !
- MySQL主从复制几个重要的启动选项
- c编程:输入一个数字n,则n代表n行,每行输入2个数字a,b计算每行的a+b问题。