Web程序開發最基本的編程模式--MVC編程模式

什麼是MVC編程模式 ?

MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟件設計典範,用一種業務邏輯、數據、界面顯示分離的方法組織代碼,將業務邏輯聚集到一個部件裏面,在改進和個性化定製界面及用戶交互的同時,不需要重新編寫業務邏輯。MVC被獨特的發展起來用於映射傳統的輸入、處理和輸出功能在一個邏輯的圖形化用戶界面的結構中

MVC開始是存在於桌面程序中的,M是指業務模型,V是指用戶界面,C則是控制器,使用MVC的目的是將M和V的實現代碼分離,從而使同一個程序可以使用不同的表現形式。比如一批統計數據可以分別用柱狀圖、餅圖來表示。C存在的目的則是確保M和V的同步,一旦M改變,V應該同步更新。
後來多用於Web程序設計中,前端View提供數據模型展示和人機交互,Controller 接收用戶請求,委託給模型進行處理(狀態改變),處理完畢後把返回的模型數據返回給視圖,由視圖負責展示。 起到了一個調度服務的作用。Mode模型層原來是包括數據和服務層,現在一般分開處理數據和服務層。

模型-視圖-控制器模式是一個有用的工具箱,它有很多好處,但也有一些缺點。

MVC模式都出現了好久了,爲啥還要學?

我問了幾個工作了的程序員(不是什麼大牛,說的不對可以指正)大廠和特殊的廠可能會玩一些的花的,但是很多公司仍是繞不開MVC和三層架構(不一樣都是三個,千萬不可混淆)。MVC仍是經典的Web開發的編程模式。
爲什麼GOF四人幫設計模式沒有寫這個設計模式?
我個人覺得主要是當時要解決的問題和後來的解決的問題不一樣,隨着時代發展,而生產出的這個設計模式。深挖一下不難發現MVC模式是組合模式、策咯模式、觀察者模式的一個結合體。其中View層,單獨實現了組合模式Model層和View層,實現了觀察者模式View層和Controller層,實現了策咯模式

MVC應用

一個非常好的應用就是 Struts框架。 Struts是最早的Java開源框架之一,它是MVC設計模式的一個優秀實現。 Struts定義了通用的Controller(控制器),通過配置文件(通常是 Struts -config.xml)
Struts是最早的java開源框架之一,它是MVC設計模式的一個優秀實現。 Struts定義了通用的Controller(控制器),通過配置文件(通常是 Struts -config.xml)隔離Model(模型)和View(視圖),以Action的概念以對用戶請求進行了封裝,使代碼更加清晰易讀。 Struts還提供了自動將請求的數據填充到對象中以及頁面標籤等簡化編碼的工具。 Struts能夠開發大型Java Web項目。

在這裏插入圖片描述
在這裏插入圖片描述
圖是在網上找的,不要罵我!

優點

1.耦合性低

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

2.重用性高

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

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

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

4.可維護性高

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

缺點

1.沒有很明確的定義,完全理解MVC比較複雜。
現在學習處於斷層,前邊的人學完了扔了,後邊的人不願意用,到現在沒啥可說的,時代就這樣。

2.調試困難。

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

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

在一箇中小型的應用程序中,強制性的使用MVC進行開發,花費大量時間將MVC應用到規模並不是很大的應用程序通常會得不償失,完全顯示不出MVC的優點。

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

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

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

視圖與控制器是相互分離,但卻是聯繫緊密的部件,視圖沒有控制器的存在,其應用是很有限的,反之亦然,這樣就妨礙了他們的獨立重用。

6.效率問題
依據模型操作接口的不同,視圖可能需要多次調用才能獲得足夠的顯示數據。對未變化數據的不必要的頻繁訪問,也將損害操作性能。

7.畢竟是整合了三種設計模式,還是有一部分的缺點沒有得到消除。

最經典的MVC實現

最典型的MVC就是jsp+servlet+javabean模式,也就是很多高校裏講的那種,有幸我就是一員。

JavaBean作爲模型,既可以作爲數據模型來封裝業務數據,又可以作爲業務邏輯模型來包含應用的業務操作。其中,數據模型用來存儲或傳遞業務數據,而業務邏輯模型接收到控制器傳過來的模型更新請求後,執行特定的業務邏輯處理,然後返回相應的執行結果。

JSP作爲表現層,負責提供頁面爲用戶展示數據,提供相應的表單(Form)來用於用戶的請求,並在適當的時候(點擊按鈕)向控制器發出請求來請求模型進行更新,JSP雖然可以使用Html的功能,但是畢竟是動態的,效率還是有一定問題的。

Serlvet作爲控制器,用來接收用戶提交的請求,然後獲取請求中的數據,將之轉換爲業務模型需要的數據模型,然後調用業務模型相應的業務方法進行更新,同時根據業務執行結果來選擇要返回的視圖。
在這裏插入圖片描述

這篇文章借鑑了不少,看了挺多的東西,才大致弄明白是什麼意思,他不像其他的設計模式,這個只有一個定義,大概就是這個樣子的,你按這個來。哈哈哈,一開始看的我挺蒙的,這是啥玩意,再看第二遍的時候,我就能明白了。如果不明白,多看幾遍。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章