對于不認識的人,MVC代表模型,視圖,控制器,并且是一種設計模式,用于將應用程序的業務,數據和表示邏輯分離為離散的組件。
MVC模式組件的Web上有很多定義,因此冒著使事情更加混亂的危險,這是我的:
模型
該模型表示系統內的數據或知識。 它通常來自(但不限于)數據庫中的數據,并且可能包含業務邏輯。 在我看來,這確實是用戶希望在其屏幕上看到的信息。
視圖
該視圖負責在屏幕上顯示模型。 對于Web應用程序,它是由瀏覽器提供的,并且在Java世界中,通常是使用JSP構建的。
控制者
控制器將用戶,模型和視圖鏈接在一起,接受用戶的請求,將其與適當的模型結合在一起,并將模型與適當的視圖結合在一起。
解釋這一點的圖通常看起來像這樣:

這樣做的好處包括可重用性,例如使用同一控制器與Web瀏覽器和電話通話; 可維護性,因為它更易于查找,修復和增強功能; 和可測試性,因為您可以分別測試每個組件。
MVC模式是由Trygve Reenskaug發明的,并且自1978年以來一直存在。TrygveReenskaug都在Wikipedia上擁有自己的頁面,并且維護著自己的詳細介紹MVC的網頁 。
就網絡應用程序而言,MVC的版本和定義似乎與海灘上的沙粒一樣多,關于什么構成模型和視圖存在各種爭論。 例如,在Web應用程序中,視圖是否包含HTML或僅包含CSS? 希望當我說Web應用程序通常使用一種稱為前端控制器模式的MVC變體時,我不會引起爭議。 在這種模式下,通常會有一個Servlet接收來自瀏覽器的請求。 該Servlet檢查請求,然后將其委托給另一個對象,該對象充當子控制器,將特定請求的視圖和模型聯系在一起。
前端控制器的早期實現經常使用所謂的JSP前端策略,即針對特定請求的每個JSP都充當子控制器。 使用這種策略時,您經常面臨編寫一大堆自定義標簽庫以包含在每個頁面中的任務。 這些負責編組模型并確定模型在視圖上的呈現方式。 從經驗來看,這導致將關注點與控制器,模型和視圖的關注點分離在一起,并在一個地方混合在一起,并且通常由JSP中的JSP進行演示,其中包含用于表示邏輯的自定義標簽,與用于數據訪問的其他自定義標簽混合并與Java Scriptlet,HTML,Javascript和開發人員的困惑融合在一起。 當關注點分離失敗時,MVC崩潰,幾個反模式重新出現,包括功能分解 , 怪物對象和泥漿大球 。 Sun(現在為Oracle)在其J2EE核心模式中不建議使用JSP Front Strategy。 從經驗來看,這是我絕對同意的觀點……下圖說明了JSP前沿戰略的陷阱:

更多最新的實現方式(完全避開了JSP前端策略)將委托給純Java子控制器,而JSP則僅負責整理演示文稿。 子控制器的職責是從模型中獲取數據并將其戳入JSP進行渲染。 這種方法已經獲得了許多Web應用程序框架的極大成功,例如使用Action類的Struts和使用版本3中的@Controller注釋以及版本2.x中的處理程序類的Spring MVC。

使用此技術一定會有一些陷阱,但是不會想到嚴重的陷阱,例如關注點分離的中斷。 如果您知道任何事情,請告訴我...
參考:我們的JCG合作伙伴 Roger Hughes在Captain Debug的博客上 都知道MVC… 。
相關文章 :
- Spring MVC攔截器示例
- jqGrid,REST,AJAX和Spring MVC集成
- SpringMVC 3 Tiles 2.2.2集成教程
- Spring MVC3 Hibernate CRUD示例應用程序
- Spring MVC開發–快速教程
- Spring,Quartz和JavaMail集成教程
- Spring Insight – Web應用程序分析
- Java教程和Android教程列表
翻譯自: https://www.javacodegeeks.com/2011/11/everybody-knows-about-mvc.html