软件开发的MVC构架
MVC:IDE開發環境開發時,無意中使用的軟件結構.
轉自于wikipedia:http://zh.wikipedia.org/wiki/MVC
軟件的層次劃分:框架——組件(設計模式)——算法與數據結構.
層次
模型(Model) “數據模型”(Model)用于封裝與應用程序的業務邏輯相關的數據以及對數據的處理方法。“模型”有對數據直接訪問的權力,例如對數據庫的訪問。“模型”不依賴“視圖”和“控制器”,也就是說,模型不關心它會被如何顯示或是如何被操作。但是模型中數據的變化一般會通過一種刷新機制被公布。為了實現這種機制,那些用于監視此模型的視圖必須事先在此模型上注冊,從而,視圖可以了解在數據模型上發生的改變。(比較:觀察者模式(軟件設計模式))
視圖(View) 視圖層能夠實現數據有目的的顯示(理論上,這不是必需的)。在視圖中一般沒有程序上的邏輯。為了實現視圖上的刷新功能,視圖需要訪問它監視的數據模型(Model),因此應該事先在被它監視的數據那里注冊。
控制器(Controller) 控制器起到不同層面間的組織作用,用于控制應用程序的流程。它處理事件并作出響應。“事件”包括用戶的行為和數據模型上的改變。
優點
在最初的JSP網頁中,像數據庫查詢語句這樣的數據層代碼和像HTML這樣的表示層代碼混在一起。經驗比較豐富的開發者會將數據從表示層分離開來,但這通常不是很容易做到的,它需要精心地計劃和不斷的嘗試。MVC從根本上強制性地將它們分開。盡管構造MVC應用程序需要一些額外的工作,但是它帶給我們的好處是毋庸置疑的。
首先,多個視圖能共享一個模型。如今,同一個Web應用程序會提供多種用戶界面,例如用戶希望既能夠通過瀏覽器來收發電子郵件,還希望通過手機來訪問電子郵箱,這就要求Web網站同時能提供Internet界面和WAP界面。在MVC設計模式中,模型響應用戶請求并返回響應數據,視圖負責格式化數據并把它們呈現給用戶,業務邏輯和表示層分離,同一個模型可以被不同的視圖重用,所以大大提高了代碼的可重用性。
其次,控制器是自包含(self-contained)指高獨立內聚的對象,與模型和視圖保持相對獨立,所以可以方便的改變應用程序的數據層和業務規則。例如,把數據庫從MySQL移植到Oracle,或者把RDBMS數據源改變成LDAP數據源,只需改變模型即可。一旦正確地實現了控制器,不管數據來自數據庫還是LDAP服務器,視圖都會正確地顯示它們。由于MVC模式的三個模塊相互獨立,改變其中一個不會影響其他兩個,所以依據這種設計思想能構造良好的少互擾性的構件。
此外,控制器提高了應用程序的靈活性和可配置性。控制器可以用來連接不同的模型和視圖去完成用戶的需求,也可以構造應用程序提供強有力的手段。給定一些可重用的模型和視圖,控制器可以根據用戶的需求選擇適當的模型進行處理,然后選擇適當的的視圖將處理結果顯示給用戶。
評價及適用范圍
MVC模式的缺點是由于它沒有明確的定義,所以完全理解MVC模式并不是很容易。使用MVC模式需要精心的計劃,由于它的內部原理比較復雜,所以需要花費一些時間去思考。開發一個MVC模式架構的工程,將不得不花費相當可觀的時間去考慮如何將MVC模式運用到應用程序中,同時由于模型和視圖要嚴格的分離,這樣也給調試應用程序帶來了一定的困難。每個構件在使用之前都需要經過徹底的測試。另外由于MVC模式將一個應用程序分成了三個部件,所以這意味著同一個工程將包含比以前更多的文件。
過去MVC模式并不適合小型甚至中等規模的應用程序,這樣會帶來額外的工作量,增加應用的復雜性。但現在多數軟件設計框架,能直接快速提供MVC骨架,供中小型應用程序開發,此問題不再存在。對于開發存在大量用戶界面,并且邏輯復雜的大型應用程序,MVC將會使軟件在健壯性、代碼重用和結構方面上一個新的臺階。盡管在最初構建MVC模式框架時會花費一定的工作量,但從長遠的角度來看,它會大大提高后期軟件開發的效率。
實現
MFC
微軟所推出的MFC Document/View架構是早期對于MVC模式的實現,MFC將程序分成CView以及CDocument兩大類型,其中的Document對應MVC中的Model,View相當于MVC中的View+Controller,再加上CWinApp類型,合成三大項。但是基本上MFC是一個失敗的MVC模式作品。
由于MFC之下的Document/View定義過于模糊,未將Controller(MessageMap)部份取出,因此Controller可以置入View或Document,但不管置入哪一方面,都會與View或Document綁死,沒有彈性。
Controller(MessageMap)對于Qt未必能自由控制,一般由語法規則控制,在這個節點上說其是不太人性化。
Python
Python 有許多的 MVC 架構。最常用的有Django 和TurboGears。
總結
以上是生活随笔為你收集整理的软件开发的MVC构架的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 知识工程.Vs.软件构架,框架,设计模式
- 下一篇: 补办银行卡,有以下四个流程