1. 程式人生 > >各種概念POJO、JAVABEAN、DAO、DTO、PO、VO、BO、SSH、EJB

各種概念POJO、JAVABEAN、DAO、DTO、PO、VO、BO、SSH、EJB

簡單 cts 取數據 bean strong 方式 不同的應用 enter 合規

轉自:https://my.oschina.net/pacoyang/blog/151695

POJOpure old java object
是普通java類,有一些private的參數作為對象的屬性,然後針對每一個參數定義get和set方法訪問的接口。

我看到這個定義,心裏就有個疑問了,這個POJO跟JavaBean的定義怎麽就這麽像?兩者有什麽區別?
POJO其實是比javabean更純凈的簡單類或接口。POJO嚴格地遵守簡單對象的概念,而一些JavaBean中往往會封裝一些簡單邏輯。

JavaBean是一種JAVA語言寫成的可重用組件。它的方法命名,構造及行為必須符合特定的約定:
1.這個類必須有一個公共的缺省構造函數。
2.這個類的屬性使用getter和setter來訪問,其他方法遵從標準命名規範。
3.這個類應是可序列化的。
簡而言之,當一個POJO可序列化,有一個無參的構造函數,使用getter和setter方法來訪問屬性時,它就是一個JavaBean。

可能有些人不明白什麽是可序列化,可以看我另一篇博客http://my.oschina.net/pacoyang/blog/151649

DAO(data access objects)
DAO是數據訪問對象,DAO一般有接口和該接口的實現類,接口用於規範實現類。實現類一般用於操作數據庫,如對數據庫進行修改、添加、刪除等操作,一般直接調用公共類DAO。

什麽是DTO(data transfer object)、什麽是VO(value object)、什麽是PO(persistent object)?
我們通過DAO將POJO持久化為PO,用PO組裝出來VO、DTO。

總結下,我認為一個對象究竟是什麽O要看具體環境,在不同的層、不同的應用場合,對象的身份也不一樣,而且對象身份的轉化也是很自然的。就像你對老婆來說就是老公,對父母來說就是子女。設計這些概念的初衷不是為了唬人而是為了更好的理解和處理各種邏輯,讓大家能更好的去用面向對象的方式處理問題。

比如:我們一張表有100個字段,那麽對應的PO就有100個屬性。但是我們界面上只要顯示10個字段,客戶端用WEBservice來獲取數據,沒有必要把整個PO對象傳遞到客戶端,這時我們就可以用只有這10個屬性的DTO來傳遞結果到客戶端,這樣也不會暴露服務端表結構.到達客戶端以後,如果用這個對象來對應界面顯示,那此時它的身份就轉為VO。

什麽是BO(business object)?

BO: POJO在業務層的體現,對於業務操作來說,更多的是從業務上來包裝對象,如一個User的BO,可能包括name, age, sex, privilege, group等,這些屬性在數據庫中可能會在多張表中,因為每一張表對應一個PO,而我們的BO需要這些PO組合起來(或說重新拼裝)才能成為業務上的一個完整對象。

EJB

EJB(Enterprise JavaBean): 我認為它是一組"功能"JavaBean的集合。上面說了JavaBean是實現了一種規範的Java對象。這裏說EJB是一組JavaBean,的意思是這一組JavaBean組合起來實現了某個企業組的業務邏輯。這裏的一組JavaBean不是亂組合的,它們要滿足能實現某項業務功能的搭配。找個比方,對於一身穿著來說,包括一頂帽子,一件衣服,一條褲子,兩只鞋。這穿著就是EJB,其它的就是一個JavaBean

SSH與EJB區別

EJB是一種javabean的組合規範,SSH是3個框架jar包的組合。

EJB本身是JavaEE的規範由容器廠商負責實現,也就是使用EJB,需要使用JavaEE服務器。而用SSH,直接用Web服務器, SSH中要解決的目標和EJB是一致的。EJB是大型的,SSH是輕量級的。

各種概念POJO、JAVABEAN、DAO、DTO、PO、VO、BO、SSH、EJB