一、什麼是MVC

MVC是Model-View-Controller的縮寫,它把軟體系統分為Model(模型)、View(視圖)和Controller(控制),實現Model和View分離的方法來組織代碼,達到分層設計的目的,從而使代碼解耦,便於維護和代碼的復用。所以說MVC是一種軟體設計的理念,可以讓我們的代碼結構更加清晰明瞭,沒有使用MVC的時候,我們的代碼結構像下圖那團亂麻一樣,而MVC提供一種規則,使用MVC分層設計之後把相同類型的代碼放在一起,這樣就形成了層次,達到分層解耦、復用、便於測試和維護的目的。

Model:「模型層」,負責業務對象與資料庫的映射(ORM),擁有處理任務的業務規則,處理後返回數據。

View:「視圖層」,提供面向用戶交互的界面。比如由html元素組成的網頁界面,或者軟體的客戶端界面。

Controller:「控制層」,根據用戶從"視圖層"輸入的請求,調用相應的"模型層"處理,並確定對應視圖顯示模型層返回的數據。

二、MVC的優缺點

MVC的優點:

1.耦合性低

視圖層和業務層分離,這樣就允許更改視圖層代碼而不用重新編譯模型和控制器代碼,同樣,一個應用的業務流程或者業務規則的改變只需要改動MVC的模型層即可。因為模型與控制器和視圖相分離,所以很容易改變應用程序的數據層和業務規則。

2.重用性高

MVC模式允許使用各種不同樣式的視圖來訪問同一個伺服器端的代碼,因為多個視圖能共享一個模型,它包括任何WEB(HTTP)瀏覽器或者無線瀏覽器(wap),比如,用戶可以通過電腦也可通過手機來訂購某樣產品,雖然訂購的方式不一樣,但處理訂購產品的方式是一樣的。由於模型返回的數據沒有進行格式化,所以同樣的構件能被不同的界面使用。

3.部署快,生命週期成本低

MVC使開發和維護用戶介面的技術含量降低。使用MVC模式使開發時間得到相當大的縮減,它使程序員(Java開發人員)集中精力於業務邏輯,界面程序員(HTML和JSP開發人員)集中精力於表現形式上。

4.可維護性高

分離視圖層和業務邏輯層也使得WEB應用更易於維護和修改。

MVC的缺點:

1.完全理解MVC比較複雜。

由於MVC模式提出的時間不長,加上同學們的實踐經驗不足,所以完全理解並掌握MVC不是一個很容易的過程。

2.調試困難。

因為模型和視圖要嚴格的分離,這樣也給調試應用程序帶來了一定的困難,每個構件在使用之前都需要經過徹底的測試。

3.不適合小型,中等規模的應用程序

在一個中小型的應用程序中,強制性的使用MVC進行開發,往往會花費大量時間,並且不能體現MVC的優勢,同時會使開發變得繁瑣。

4.增加系統結構和實現的複雜性

對於簡單的界面,嚴格遵循MVC,使模型、視圖與控制器分離,會增加結構的複雜性,並可能產生過多的更新操作,降低運行效率。

5.視圖與控制器間的過於緊密的連接並且降低了視圖對模型數據的訪問

視圖與控制器是相互分離,但卻是聯繫緊密的部件,視圖沒有控制器的存在,其應用是很有限的,反之亦然,這樣就妨礙了他們的獨立重用。依據模型操作介面的不同,視圖可能需要多次調用才能獲得足夠的顯示數據。對未變化數據的不必要的頻繁訪問,也將損害操作性能。

三、MVC的演化Web MVC

隨著Web的興起,人們開始把MVC,MVP等知識應用到Web環境下。由於MVC中Controller截獲用戶通過滑鼠或鍵盤發出的請求,然後改變Model的狀態,Model通過Observer Synchronization(觀察者模式)通知View自己的狀態發生了變化,View查詢Model展現數據。但Web環境中HTTP請求是無狀態的,每次請求都是獨立的,所以不可能實現觀察者模式。

在傳統的MVC中,Controler可以改變Model的狀態,View可以查詢Model的狀態,所以說對Model而言,Controller和View的地位是平等的,不過在Web MVC中,Controller變成了中繼者,主要工作是協調Model和View。一個典型的Web MVC流程:Controller截獲用戶發出的請求;Controller調用Model完成狀態的讀寫操作;Controller把數據傳遞給View;View渲染最終結果並呈獻給用戶

四、MVC的演化MTV

Django的MTV模式本質上與MVC模式並沒有什麼差別,也是為了各組件之間保持松耦合關係,只是定義上有些不同。Django將MVC中的視圖進一步分解為Django視圖和Django模板兩個部分,分別決定「展現哪些數據」 和「如何展現」,使得Django的模板可以根據需要隨時替換,而不僅僅限制於內置的模板。至於MVC控制器部分,由Django框架的URLconf來實現,因此Django更關注Model(模型)、Template(模版)和View(視圖),稱為MTV模式。

這種設計模式關鍵的優勢在於各種組件都是松耦合的,每個由 Django驅動的Web應用都有著明確的目的,並且可獨立更改而不影響到其它的部分。比如,開發者更改一個應用程序中的URL而不用影響到這個程序底層的實現。設計師可以改變HTML頁面的樣式而不用接觸Python代碼。資料庫管理員可以重新命名數據表並且只需更改模型,無需從一大堆文件中進行查找和替換。

作者:元宵大師鏈接:imooc.com/article/26620來源:慕課網本文首次發佈於慕課網 ,轉載請註明出處,謝謝合作

推薦閱讀:

接手別人的代碼,死的心有嗎?

普通的程序員和大神級的程序員有什麼區別?

網上黑程序員的現實依據是什麼?程序員真的那麼悲慘嗎?

有哪些視頻堪稱有毒?

暴露真實IP真的沒關係嗎?

有哪些程序員特有的習慣?

月薪3萬的程序員都避開了哪些坑?

和程序猿談戀愛是一種怎樣的體驗?


推薦閱讀:
相關文章