每个人都知道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.mzph.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…