理解POCO
理解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使用。