1. 程式人生 > >Spring框架四大基本原則

Spring框架四大基本原則

一、使用POJO進行輕量級和最小侵入式開發。

1. 什麼是POJO

按照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)。Java初高階一起學習分享,喜歡的話可以我的學習群64弍46衣3凌9,或加資料群69似64陸0吧3

 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的基礎上,能夠擴展出不同的物件。 l 為POJO增加了持久化的方法(Insert、Update、Delete……)之後,POJO就變成了PO。 l 為POJO增加了資料繫結功能之後,POJO就變成了View Object,即UI Model。 l 為POJO增加業務邏輯的方法(比如單據稽核、轉帳……)之後,POJO就變成了Domain Model。 l POJO還可以當作DTO使用。

6. 侵入式開發與非侵入式開發的區別

假設大家都想要把使用者程式碼塞到一個框架裡。侵入式的做法就是要求使用者程式碼“知道”框架的程式碼,表現為使用者程式碼需要繼承框架提供的類。非侵入式則不需要使用者程式碼引入框架程式碼的資訊,從類的編寫者角度來看,察覺不到框架的存在。 例如: 使用struts的時候,我需要繼承一些struts的類,這時struts侵入到了我的程式碼裡。 使用spring,編寫一些業務類的時候不需要繼承spring特定的類,通過配置完成依賴注入後就可以使用,此時,spring就沒有侵入到我業務類的程式碼裡。 侵入式讓使用者程式碼產生對框架的依賴,這些程式碼不能在框架外使用,不利於程式碼的複用。但侵入式可以使使用者跟框架更好的結合,更容易更充分的利用框架提供的功能。 非侵入式的程式碼則沒有過多的依賴,可以很方便的遷移到其他地方。但是與使用者程式碼互動的方式可能就比較複雜。 這兩種方式都有各自的優缺點吧,主要看實際開發時怎麼權衡了。

二、通過依賴注入和基於介面程式設計實現鬆耦合。

三、通過AOP和預設習慣進行宣告式程式設計。

 四、使用AOP和模板(template)減少模式化程式碼