MVC 設計模式

工作原理: 控制器,模型,視圖 分割開來,偶合度低 各司其職.類似模組化,可插拔. 主要應用於WEB開發.
主流 FRAMEWORK: STRUTS, JSF,based on MVC
缺點: 會降低系統性能

MVC模式的目的是實作一種動態的程式設計,使後續對程式的修改和擴充功能簡化,並且使程式某一部分的重複利用成為可能.
模式透過對複雜度的簡化,使程式結構更加直覺.
體系統透過對自身基本部分分離的同時也賦予了各個基本部分應有的功能。

專業人員可以透過自身的專長分組:
(控制器Controller)- 負責轉發請求,對請求進行處理。
(檢視View) – 介面設計人員進行圖形介面設計。
(模型Model) – 程式設計師編寫程式應有的功能(實作演算法等等)、資料庫專家進行資料管理和資料庫設計(可以實作具體的功能)。

模型(Model)
用於封裝與應用程式的業務邏輯相關的資料以及對資料的處理方法。「模型」有對資料直接存取的權力,例如對資料庫的存取。「模型」不依賴「檢視」和「控制器」,也就是說,模型不關心它會被如何顯示或是如何被操作。但是模型中資料的變化一般會透過一種重新整理機制被公布。為了實作這種機制,那些用於監視此模型的檢視必須事先在此模型上註冊,從而,檢視可以了解在資料模型上發生的改變。(比較:觀察者模式(軟體設計模式)

檢視(View) 檢視層能夠實作資料有目的的顯示(理論上,這不是必需的)。在檢視中一般沒有程式上的邏輯。為了實作檢視上的重新整理功能,檢視需要存取它監視的資料模型(Model),因此應該事先在被它監視的資料那裡註冊。

控制器(Controller) 控制器起到不同層面間的組織作用,用於控制應用程式的流程。它處理事件並作出響應。「事件」包括使用者的行為和資料模型上的改變。

MVC:

資料從表示層分離開來, MVC從根本上強制性地將它們分開

多個檢視能共享一個模型。如今,同一個Web應用程式會提供多種使用者介面,例如使用者希望既能夠透過瀏覽器來收發電子郵件,還希望透過手機來存取電子信箱,這就要求Web網站同時能提供Internet介面和WAP介面。

在MVC設計模式中,模型響應使用者請求並返迴響應資料,檢視負責格式化資料並把它們呈現給使用者,業務邏輯和表示層分離,同一個模型可以被不同的檢視重用,所以大大提高了代碼的可重用性.

MVC模式的缺點是由於它沒有明確的定義,所以完全理解MVC模式並不是很容易。
使用MVC模式需要精心的計劃,由於它的內部原理比較複雜,所以需要花費一些時間去思考。

開發一個MVC模式架構的工程,將不得不花費相當可觀的時間去考慮如何將MVC模式運用到應用程式中,同時由於模型和檢視要嚴格的分離,這樣也給偵錯應用程式帶來了一定的困難。每個構件在使用之前都需要經過徹底的測試。另外由於MVC模式將一個應用程式分成了三個部件,所以這意味著同一個工程將包含比以前更多的檔案。

過去MVC模式並不適合小型甚至中等規模的應用程式,在最初構建MVC模式框架時會花費一定的工作量,但從長遠的角度來看,它會大大提高後期軟體開發的效率

Java 平台企業版 (J2EE)

和其他的各種框架不一樣,J2EE為模型物件(Model Objects)定義了一個規範。

檢視(View)
在J2EE應用程式中,檢視(View)可能由Java Server Page(JSP)承擔。生成檢視的代碼則可能是一個servlet的一部分,特別是在客戶端伺服端互動的時候。

控制器(Controller)
J2EE應用中,控制器可能是一個servlet,現在一般用Struts2/Spring Framework實作。

模型(Model)
模型則是由一個實體Bean來實作

Java Swing
Swing是一個標準的MVC結構. ComponentUI代表View, 負責描畫元件. 元件尤其Model層, 比如JTextField的Document, JTable的TableModel, JTree的TreeModel等等. 而Control可能不是很明顯, 我們或許可以簡單的將其Event機制看作一個Swing團隊開發給開發者的Controller.
作為Java開發者, 如果想理解MVC的結構, 學習Swing的確是個不錯的選擇.

Advertisements
發表留言

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

%d 位部落客按了讚: