|
理解POCO(Plain Old CLR Object)先要理解POJO。
1、什么是POJO?
POJO的名稱有多種,pure old Java object 、plain ordinary Java object 等。
按照Martin Fowler的解釋是“Plain Old Java Object”,從字面上翻譯為“純潔老式的Java對(duì)象”,但大家都使用“簡(jiǎn)單Java對(duì)象”來(lái)稱呼它。
POJO的內(nèi)在含義是指那些沒(méi)有從任何類繼承、也沒(méi)有實(shí)現(xiàn)任何接口,更沒(méi)有被其它框架侵入的Java對(duì)象。
POCO的概念是從Java的POJO借用而來(lái),而兩者的含義是一致的,不同的僅僅是使用的語(yǔ)言不一樣。所以POCO的解釋就是“Plain Old C# Object”。
2、為什么會(huì)有POJO?
主要是Java的開(kāi)發(fā)者被EJB的繁雜搞怕了,大家經(jīng)過(guò)反思,又回歸“純潔老式”的JavaBean,即有無(wú)參構(gòu)造函數(shù),每個(gè)字段都有g(shù)etter和setter的Java類。
3、POJO的意義
POJO讓開(kāi)發(fā)者可專注于業(yè)務(wù)邏輯和脫離框架的單元測(cè)試。除此之外, 由于POJO并不須要繼承框架的類或?qū)崿F(xiàn)其接口,開(kāi)發(fā)者能夠極其靈活地搭建繼承結(jié)構(gòu)和建造應(yīng)用。
POJO的意義就在于它的簡(jiǎn)單而靈活性,因?yàn)樗暮?jiǎn)單和靈活,使得POJO能夠任意擴(kuò)展,從而勝任多個(gè)場(chǎng)合,也就讓一個(gè)模型貫穿多個(gè)層成為現(xiàn)實(shí)。
先寫(xiě)一個(gè)核心POJO,然后實(shí)現(xiàn)業(yè)務(wù)邏輯接口和持久化接口,就成了Domain Model; UI需要使用時(shí),就實(shí)現(xiàn)數(shù)據(jù)綁定接口,變成VO(View Object)。
4、POJO與PO、VO的區(qū)別
POJO是指簡(jiǎn)單Java對(duì)象(Plain Old Java Objects、pure old Java object 或者 plain ordinary Java object)。
PO是指持久對(duì)象(persistant object持久對(duì)象)。
VO是指值對(duì)象或者View對(duì)象(Value Object、View Object)。注意,本文的VO特指View Object。
持久對(duì)象實(shí)際上必須對(duì)應(yīng)數(shù)據(jù)庫(kù)中的entity,所以和POJO有所區(qū)別。比如說(shuō)POJO是由new創(chuàng)建,由GC回收。但是持久對(duì)象是 insert數(shù)據(jù)庫(kù)創(chuàng)建,由數(shù)據(jù)庫(kù)delete刪除的。基本上持久對(duì)象 生命周期和數(shù)據(jù)庫(kù)密切相關(guān)。另外持久對(duì)象往往只能存在一個(gè)數(shù)據(jù)庫(kù) Connection之中,Connnection關(guān)閉以后,持久對(duì)象就不存在了,而POJO只要不被GC回收,總是存在的。
由于存在諸多差別,因此持久對(duì)象PO(Persistent Object)在代碼上肯定和POJO不同,起碼PO相對(duì)于POJO會(huì)增加一些用來(lái)管理數(shù)據(jù)庫(kù)entity狀態(tài)的屬性和方法。而ORM追求的目標(biāo)就是要 PO在使用上盡量和POJO一致,對(duì)于程序員來(lái)說(shuō),他們可以把PO當(dāng)做POJO來(lái)用,而感覺(jué)不到PO的存在。
5、POJO的擴(kuò)展
POJO僅包含最簡(jiǎn)單的字段屬性,沒(méi)有多余的東西,它本質(zhì)上就是一個(gè)普通的JavaBean。
但是在POJO的基礎(chǔ)上,能夠擴(kuò)展出不同的對(duì)象。
- 為POJO增加了持久化的方法(Insert、Update、Delete……)之后,POJO就變成了PO。
- 為POJO增加了數(shù)據(jù)綁定功能之后,POJO就變成了View Object,即UI Model。
- 為POJO增加業(yè)務(wù)邏輯的方法(比如單據(jù)審核、轉(zhuǎn)帳……)之后,POJO就變成了Domain Model。
- POJO還可以當(dāng)作DTO使用。
it知識(shí)庫(kù):理解POCO,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。