POJO模式
下面是摘自Martin Fowler個人網站的一句話:
“We wondered why people were so against using regular objects in their systems and concluded that it was because simple objects lacked a fancy name. So we gave them one, and it’s caught on very nicely.”--Martin Fowler
我們疑惑為什么人們不喜歡在他們的系統中使用普通的對象,我們得到的結論是——普通的對象缺少一個響亮的名字,因此我們給它們起了一個,并且取得了很好的效果。——Martin Fowler
============================================
1、什么是POJO
POJO是Plain OrdinaryJava Object的縮寫不錯,但是它通指沒有使用Entity Beans的普通java對象,沒有任何有關業務邏輯的實現,可以把POJO作為支持業務邏輯的協助類。
POJO的名稱有多種,pure old java object 、plain ordinary java object 等。
POJO的內在含義是指那些沒有從任何類繼承、也沒有實現任何接口,更沒有被其它框架侵入的java對象。
POCO的概念是從java的POJO借用而來,而兩者的含義是一致的,不同的僅僅是使用的語言不一樣。所以POCO的解釋就是“Plain Old C# Object”。
2. 為什么會有POJO?
主要是Java的開發者被EJB的繁雜搞怕了,大家經過反思,又回歸“純潔老式”的JavaBean,即有無參構造函數,每個字段都有getter和setter的java類。
POJO的意義就在于它的簡單而靈活性,因為它的簡單和靈活,使得POJO能夠任意擴展,從而勝任多個場合,也就讓一個模型貫穿多個層成為現實。先寫一個核心POJO,然后實現業務邏輯接口和持久化接口,就成了Domain Model; UI需要使用時,就實現數據綁定接口,變成VO(View Object)。
3. 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的存在。
4、POJO與javabean的區別
POJO和JavaBean是我們常見的兩個關鍵字,一般容易混淆,POJO全稱是Plain Ordinary Java Object / Pure Old Java Object,中文可以翻譯成:普通Java類,具有一部分getter/setter方法的那種類就可以稱作POJO,但是JavaBean則比 POJO復雜很多, Java Bean 是可復用的組件,對 Java Bean 并沒有嚴格的規范,理論上講,任何一個 Java 類都可以是一個 Bean 。但通常情況下,由于 Java Bean 是被容器所創建(如 Tomcat) 的,所以 Java Bean 應具有一個無參的構造器,另外,通常 Java Bean 還要實現 Serializable 接口用于實現 Bean 的持久性。 Java Bean 是不能被跨進程訪問的。
JavaBean是一種組件技術,就好像你做了一個扳子,而這個扳子會在很多地方被拿去用,這個扳子也提供多種功能(你可以拿這個扳子扳、錘、撬等等),而這個扳子就是一個組件。
一般在web應用程序中建立一個數據庫的映射對象時,我們只能稱它為POJO。POJO(Plain Old Java Object)這個名字用來強調它是一個普通java對象,而不是一個特殊的對象,其主要用來指代那些沒有遵從特定的Java對象模型、約定或框架(如EJB)的Java對象。理想地講,一個POJO是一個不受任何限制的Java對象(除了Java語言規范)。
5、POJO的擴展
POJO僅包含最簡單的字段屬性,沒有多余的東西,它本質上就是一個普通的JavaBean。但是在POJO的基礎上,能夠擴展出不同的對象。
a、為POJO增加了持久化的方法(Insert、Update、Delete……)之后,POJO就變成了PO。
b、為POJO增加了數據綁定功能之后,POJO就變成了View Object,即UI Model。
c、為POJO增加業務邏輯的方法(比如單據審核、轉帳……)之后,POJO就變成了Domain Model。
d、 POJO還可以當作DTO使用,等等。
6、實例
POJO有一些private的參數作為對象的屬性。然后針對每個參數定義了get和set方法作為訪問的接口。例如:
public class User {private long id;private String name;public void setId(long id) {this. id = id;}public void setName(String name) {this. name=name;}public long getId() {return id;}public String getName() {return name;}}總結
- 上一篇: 【struts2】struts2的零配置
- 下一篇: 【struts2】struts2实现自定