对于不认识的人,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