struts 學習筆記之MVC模式

struts 中的MVC架構以下:前端

 

struts_mvc.JPG 

View :由JSPStruts自定義標記庫、資源文件(MessageResources.properties)共同組成,經過ActionForm實現JSP表單的封裝,並映射到Model部分中JavaBean的相應屬性中,完成用戶數據的封裝。java

 

注意:關於ActionForm,有些人認爲它屬於Model層(仁者見仁,智者見智)。web

事實上它不是Model,真正的Model應該是一個封裝了業務邏輯的的對象。數據庫

ActionForm僅僅是一個form-bean,封裝了用戶提交的表單數據(物理View),能夠在其中進行一些非業務邏輯的驗證,並無真正的映射到模型數據,由於與層的關係比較密切,因此實際上它應該算是View層(邏輯View)。架構

 

Action 處理器對象能夠直接對ActionForm進行讀寫,而再也不須要和requestresponse對象進行數據交互。經過ActionForm組件對象實現了對ViewModel之間交互的支持。M模型層,原則上來講和業務邏輯有關的東西都在這裏處理。mvc

 

Controller :接收客戶端的request,進行業務邏輯處理,response到客戶端。在StrutsController功能由圖中ActionServletActionMapping對象構成:核心是一個Servlet類型的對象ActionServlet(在struts-config.xml中配置),其實是一個前端控制器(Front Controller)。ActionServlet根據ActionMapping對象的定義跳轉到不一樣的Action,每一個ActionMapping對象實現了一個requestAction對象之間的映射。app

 

 Controller層負責流程的控制,在處理Model層與View層之間的交互的同時,又將二者分離開來,從而實現了MVC模式。Model層包含了應用的核心部分,業務邏輯數據存取View層負責應用的界面。框架

 

在上面的圖中看到Action位於Controller層,但也有不少人把它歸於Model層,實際上 Action 僅僅描述"作什麼",與"如何作"Model)關係不大,把它歸於 Controller 層比較合適。spa

 

Model :通常Model層能夠劃分爲三部分:公共入口業務邏輯Bussiness Logic),數據持久化DAO+JavaBean)。hibernate

Spring+Hibernate的架構中,M能夠用 Spring Bussiness Interface + Bussiness Implement)表示業務邏輯Hibernate實現數據持久化


 

 

 PO/POJO/BO/DTO/VO的區別

---------------------------------------------------------

PO persistent object持久對象

1 .有時也被稱爲Data對象,對應數據庫中的entity,能夠簡單認爲一個PO對應數據庫中的一條記錄。

2 .在hibernate持久化框架中與insert/delet操做密切相關。

3 .PO中不該該包含任何對數據庫的操做。

 

---------------------------------------------------------

POJO plain ordinary java object 無規則簡單java對象

一箇中間對象,能夠轉化爲PODTOVO

 

1 .POJO持久化以後==PO

(在運行期,由Hibernate中的cglib動態把POJO轉換爲POPO相對於POJO會增長一些用來管理數據庫entity狀態的屬性和方法。PO對於programmer來講徹底透明,因爲是運行期生成PO,因此能夠支持增量編譯,增量調試。)

2 .POJO傳輸過程當中==DTO

3 .POJO用做表示層==VO

 

PO 和VO都應該屬於它。

 

----------------------------------------------------------

BO business object 業務對象

封裝業務邏輯爲一個對象(能夠包括多個PO,一般須要將BO轉化成PO,才能進行數據的持久化,反之,從DB中獲得的PO,須要轉化成BO才能在業務層使用)。

關於BO主要有三種概念

1 、只包含業務對象的屬性;

2 、只包含業務方法;

3 、二者都包含。

在實際使用中,認爲哪種概念正確並不重要,關鍵是實際應用中適合本身項目的須要。

 

----------------------------------------------------------

VO value object值對象 / view object表現層對象

1 .主要對應頁面顯示(web頁面/swtswing界面)的數據對象。

2 .能夠和表對應,也能夠不,這根據業務的須要。

 

 :在struts中,用ActionFormVO,須要作一個轉換,由於PO是面向對象的,而ActionForm是和view對應的,要將幾個PO要顯示的屬性合成一個ActionForm,可使用BeanUtilscopy方法。

 

----------------------------------------------------------

DTO TO Data Transfer Object數據傳輸對象

1 .用在須要跨進程或遠程傳輸時,它不該該包含業務邏輯。

2 .好比一張表有100個字段,那麼對應的PO就有100個屬性(大多數狀況下,DTO 內的數據來自多個表)。但view層只需顯示10個字段,沒有必要把整個PO對象傳遞到client,這時咱們就能夠用只有這10個屬性的DTO來傳輸數據到client,這樣也不會暴露server端表結構。到達客戶端之後,若是用這個對象來對應界面顯示,那此時它的身份就轉爲VO

 

----------------------------------------------------------

DAO data access object數據訪問對象

1 .主要用來封裝對DB的訪問(CRUD操做)。

2 .經過接收Business層的數據,把POJO持久化爲PO

相關文章
相關標籤/搜索