每個人都知道MVC…

從一個最近的博客中,您可能已經了解到我最近一直在進行一些采訪,因為他們是針對Web應用程序開發人員的,所以我問的一個問題是“您能解釋一下MVC模式是什么嗎?”,值得稱贊的是,每個候選人知道答案。

對于不認識的人,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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/374467.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/374467.shtml
英文地址,請注明出處:http://en.pswp.cn/news/374467.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

php無限分類

無限循環 1.需要套2個foreach 2.2個foreach結構一樣 純代碼獲取數據 public function CycleData($parent_id0){$where[parent_id] $parent_id;$res $this->m->where($where)->field(id,name)->select();foreach($res as $k>$v){$result[$v[id]][id] $v[id];$r…

動態網頁數據的采集方案

我在上一篇文章中介紹了使用ScrapySharp快速從網頁中采集數據,這種方式是通過直接發送的Http請求來獲取的原始頁面信息,對于靜態網頁非常有效,但還有許多網站中的頁面內容并非全部存放在原始的頁面中,很多內容是通過javascript來動…

r語言ggplot2 多線圖繪制圖例_plotnine: Python版的ggplot2作圖庫

騰訊課堂 | Python網絡爬蟲與文本數據分析同樣的基本作圖任務,plotnine比matplotlib和seaborn代碼量少,更美觀。所以我又重新發一遍,大家可以先收藏起來,后面總有用到的時候~R語言的ggplot2繪圖能力超強,python雖有mat…

單元和集成測試的代碼覆蓋率

我最近在一個寵物項目中著手構建自動化的UI(集成)測試以及普通的單元測試。 我想將所有這些集成到我的Maven構建中,并提供代碼覆蓋率報告,以便我可以了解測試覆蓋率不足的區域。 我不僅發布了項目的源代碼,還整理了一個…

javascript事件與event對象的屬性

javascript事件列表解說事件瀏覽器支持解說一般事件onclickIE3、N2鼠標點擊時觸發此事件ondblclickIE4、N4鼠標雙擊時觸發此事件onmousedownIE4、N4按下鼠標時觸發此事件onmouseupIE4、N4鼠標按下后松開鼠標時觸發此事件onmouseoverIE3、N2當鼠標移動到某對象范圍的上方時觸發此…

感想

讀完三篇文章看到了前輩們的努力與堅持和對各自的學科的熱愛,以及各位前輩的奮斗的艱苦環境,我與那些前輩相比也許還達不到前輩們的那種級別,但是我的學習的條件卻比那些前輩們好的多,看完前輩們的奮斗史,以及前輩們的…

python學生分布_Python數據分析實戰之分布分析

前言 本文的文字及圖片來源于網絡,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯系我們以作處理。 作者:嚴小樣兒 分布分析法,一般是根據分析目的,將數據進行分組,研究各組別分布規律的一種分析方法。…

使用Spring Security 3.1保護RESTful Web服務,第3部分

1.概述 本教程顯示了如何使用Spring和基于Java的Spring Security 3.1來保護REST服務 。 本文將重點介紹如何使用“登錄和Cookie”方法專門針對REST API設置安全配置。 2. Spring Security的體系結構完全基于Servlet過濾器,因此,在HTTP請求處理方面&…

一次完整的HTTP請求所經歷的7個步驟

HTTP通信機制是在一次完整的HTTP通信過程中,Web瀏覽器與Web服務器之間將完成下列7個步驟: 1、建立TCP連接 在HTTP工作開始之前,Web瀏覽器首先要通過網絡與Web服務器建立連接,該連接是通過TCP來完成的,該協議與IP協議共…

jQuery基礎--樣式篇(3)

1.jQuiery對象與DOM對象   對于剛剛接觸jQuery的初學者,我們要清楚認識一點:jQuery對象與DOM對象是不一樣的。可能一時半會分不清楚哪些是jQuery對象,哪些是DOM對象,下面重點介紹一下jQuery對象,以及兩者相互間的轉換…

hls fifo_HLS優化方法DATAFLOW你用了嗎

上期內容:異步跨時鐘域電路該怎么約束DATAFLOW作為HLS的一種優化方法,對于改善吞吐率(Throughput)、降低延遲(Latency)非常有效。DATAFLOW的作用對象DATAFLOW可以作用于函數,也可以作用于for循環。如下圖所示(圖片來源Figure62, Figure 63, u…

Java 8虛擬擴展方法

我一直關注Java 8 Lambda表達式項目的發展已經有一段時間了,我對其當前的進展狀態感到非常興奮。 我發現的最新“易于理解”的演示文稿是這樣的: http://blogs.oracle.com/briangoetz/resource/devoxx-lang-lib-vm-co-evol.pdf 現在,作為一名…

python爬蟲 庫_七款必備的Python爬蟲庫,你知道幾個?

很多你需要的信息數據都是在網站內,雖然有些網站的數據會以整潔、結構化的形式呈現,但大部分網站卻無法做到這樣。因此,當你想要獲得一些數據的時候,你需要一些爬蟲工具幫助抓取,然后再對其進行分析。今天,…

62個Android Studio小技巧合集

轉載: 原文鏈接:http://laobie.github.io/android/2016/02/14/android-studio-tips.html轉載于:https://www.cnblogs.com/kesteler/p/5618490.html

在Hibernate,EhCache,Quartz,DBCP和Spring中啟用JMX

繼續使用JMX的過程(請參閱: 人類JMX ),我們將學習如何在一些流行的框架中啟用JMX支持(通常是統計和監視功能)。 這些信息大部分都可以在項目的主頁上找到,但是我決定在收集這些信息的同時&#…

二叉樹遍歷(前中后)

二叉樹前序遍歷&#xff1a; /*** Definition for binary tree* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/ class Solution { public:vector<int> preorderTravers…

python語言程序設計實踐教程答案實驗六_Python程序設計實踐教程

書名&#xff1a;Python程序設計實踐教程 定價&#xff1a;29.8 ISBN&#xff1a;9787115532602 作者&#xff1a;儲岳中 薛希玲 版次&#xff1a;*1版 出版時間&#xff1a;2020-04 內容提要&#xff1a; 本書是Python語言程序設計的配套實踐教材&#xff0c;分為三部分&#…

400多萬微信用戶如何“變現”?凱叔說了五大秘訣與教訓

凱叔&#xff0c;原名王凱&#xff0c;自媒體“凱叔講故事”創始人&#xff0c;近日在獅享家班委會上做了分享&#xff0c;全是實實在在的實驗性方法論。以下是王凱的分享內容&#xff0c;整理 / 垅青 我講的主題叫“基于內容的MVP探索”&#xff0c;MVP是什么東西&#xff1f;…

使用dbUnit,JSON,HSQLDB和JUnit規則進行數據庫單元測試

在本周TDD課程的運行中&#xff0c;我認為編寫一些夾具以簡化dbUnit的使用將很有趣。 我最初的想法只是教dbUnit有關JSON的知識&#xff0c;但事實證明Lieven Doclo已經做到了。 因此&#xff0c;我決定更進一步&#xff0c;還將dbUnit與JUnit Rules結合起來&#xff0c;并提供…

Codeforces Round #321 (Div. 2) E. Kefa and Watch 線段樹hash

E. Kefa and Watch Time Limit: 1 Sec Memory Limit: 256 MB 題目連接 http://codeforces.com/contest/580/problem/EDescription One day Kefa the parrot was walking down the street as he was on the way home from the restaurant when he saw something glittering by…