MVC的理解和優缺點的總結

概念:

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

       最典型的MVC就是Jsp + Servlet + JavaBean的模式

       MVC開始是存在於桌面程序中的,M是指業務模型,V是指用戶界面,C則是控制器,使用MVC的目的是將M和V的實現代碼分離,從而使同一個程序可以使用不同的表現形式。C存在的目的則是確保M和V的同步,一旦M改變,V應該同步更新。更好的調節M和V的搭配。

       MVC是一種框架模式,說到底是一種框架,而不是一種設計模式,框架通常是代碼重用,而設計模式是設計重用,而架構則介於兩者之間,部分代碼重用,部分設計重用,有時分析也可重用。

視圖view:

  視圖是用戶看到並與之交互的界面,可以被瀏覽器解釋成用戶界面的一切語言,最常見的就是html。

模型model:

      在MVC的三個部件中,模型擁有最多的處理任務。例如來對數據庫的操作,被模型返回的數據是中立的,就是說模型與數據將要顯示的格式無關,這樣一個模型能爲多個視圖提供數據,也就是說數據在顯示的時候有多種顯示模式,例如css可以給同樣的數據多種顯示模式,由於應用於模型的代碼只需寫一次就可以被多個視圖重用,所以減少了代碼的重複性。

控制器controler:

  控制器接受用戶的輸入並調用模型和視圖去完成用戶的需求,所以當單擊Web頁面中的超鏈接和發送HTML表單時,控制器本身不輸出任何東西和做任何處理。它只是接收請求並決定調用哪個模型構件去處理請求,然後再確定用哪個視圖來顯示返回的數據。更好的調節M和V的搭配。C層可以做的事情在M或者V層中都可以做。只是爲了更好的分層。

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

  在MVC裏,View是可以直接訪問Model的,例如在jsp頁面上,可以嵌套Java代碼,這樣在View上就可以越過Controller訪問Model了,從而,View裏會包含Model信息,不可避免的還要包括一些業務邏輯。 在MVC模型裏,更關注的Model的不變,而同時有多個對Model的不同顯示,即View。所以,在MVC模型裏,Model不依賴於View,【因爲MVC的核心是Model】但是View是依賴於Model的。不僅如此,因爲有一些業務邏輯在View裏實現了,導致要更改View也是比較困難的,至少那些業務邏輯是無法重用的,因爲這部分不是公用的Model了,其他View不能使用這個View裏面的代碼。

      而在MVC中View會從直接Model中讀取數據而不是通過 Controller。這也是MVC和MVP的最主要的區別。所以MVC中模型與視圖並沒有完全分離。而且控制層和表現層有時會過於緊密,導致沒有真正分離和重用。

優點:MVC 式的出現不僅實現了功能模塊和顯示模塊的分離,同時它還提高了應用系統的可維護性、可擴展性、可移植性和組件的可複用性

1:耦合性低

  視圖層和業務層分離,這樣就允許更改視圖層代碼而不用重新編譯模型和控制器代碼,[例如,改寫jsp,html,css,javascirpt的代碼,並不需要重啓服務器]同樣,一個應用的業務流程或者業務規則的改變只需要改動MVC的模型層即可【例如,換表名查詢,更改一些查詢的條件,或者使用動態sql還是靜態的sql,只用更改model即可】。因爲模型與控制器和視圖相分離,所以很容易改變應用程序的數據層和業務規則。

2:重用性高

  隨着技術的不斷進步,需要用越來越多的方式來訪問應用程序。MVC模式允許使用各種不同樣式的視圖來訪問同一個服務器端的代碼,因爲多個視圖能共享一個模型,它包括任何WEB(HTTP)瀏覽器或者無線瀏覽器(wap),比如,用戶可以通過電腦也可通過手機來訂購某樣產品,雖然訂購的方式不一樣,但處理訂購產品的方式是一樣的。由於模型返回的數據沒有進行格式化,所以同樣的構件能被不同的界面使用。【例如,模型層實現了同樣的分頁,不同的視圖層可以用一萬種不同的顯示方法,例如百度搜索下面的分頁和谷歌搜索下面的分頁MVC使開發和維護用戶接口的技術含量降低。

3:部署快

  使用MVC模式使開發時間得到相當大的縮減,它使程序員(Java開發人員)集中精力於業務邏輯,界面程序員(HTML和JSP開發人員)集中精力於表現形式上。【例如,前端後端可以分工作業,效率高,方便多開發人員間的分工

4:可維護性高

  分離視圖層和業務邏輯層也使得WEB應用更易於維護和修改。【例如:如果想改業務邏輯,只用改業務邏輯,如果想改視圖,只用改視圖,如果想增加功能,只需要增加即可,分層最大的好處就是容易後期維護降低維護成本,和增加新的功能,提高代碼重用性,從而提高開發效率

5:有利軟件工程化管理

  由於不同的層各司其職,每一層不同的應用具有某些相同的特徵,有利於通過工程化、工具化管理程序代碼。控制器也提供了一個好處,就是可以使用控制器來聯接不同的模型和視圖去完成用戶的需求,這樣控制器可以爲構造應用程序提供強有力的手段。給定一些可重用的模型和視圖,控制器可以根據用戶的需求選擇模型進行處理,然後選擇視圖將處理結果顯示給用戶。【因爲控制器重點在於分配,更好的結合視圖和模型

缺點:

1:沒有明確的定義

  完全理解MVC並不是很容易。使用MVC需要精心的計劃,由於它的內部原理比較複雜,所以需要花費一些時間去思考。同時由於模型和視圖要嚴格的分離,這樣也給調試應用程序帶來了一定的困難。每個構件在使用之前都需要經過徹底的測試。

2:不適合小型,中等規模的應用程序

  花費大量時間將MVC應用到規模並不是很大的應用程序通常會得不償失。【這個是最明顯的缺點,例如我們僅僅需要到數據庫查信息,如果不分層設計我們可以直接從視圖型層到模型去訪問,效率上會有所提高,如果以代碼的複雜性爲代價,多了一層,代碼量大大增加,在這個時候就降低了開發效率

3:增加系統結構和實現的複雜性

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

4:視圖與控制器間的過於緊密的連接

  視圖與控制器是相互分離,但卻是聯繫緊密的部件,視圖沒有控制器的存在,其應用是很有限的,反之亦然,這樣就妨礙了他們的獨立重用。【例如,不可能總是在jsp頁面中直接訪問模型,一般放在邏輯控制層進行處理,servlet

5:視圖對模型數據的低效率訪問

  依據模型操作接口的不同,視圖可能需要多次調用才能獲得足夠的顯示數據。對未變化數據的不必要的頻繁訪問,也將損害操作性能。【例如,頁面的有一部分數據我並沒有更新,但是提交到模型層照樣會去獲得返回顯示 

6:一般高級的界面工具或構造器不支持模式

  改造這些工具以適應MVC需要和建立分離的部件的代價是很高的,會造成MVC使用的困難。

總結:

  優點:分層,結構清晰,耦合性低,大型項目代碼的複用性得到極大的提高,開發人員分工明確,提高了開發的效率,維護方便,降低了維護成本。

  缺點:簡單的小型項目,使用MVC設計反而會降低開發效率,層和層雖然相互分離,但是之間關聯性太強,沒有做到獨立的重用。

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