MVC的历史和发展_mvc 的上一代-程序员宅基地

技术标签: java  mvc  

1.MVC的历史和发展

1.1 Classic MVC

 大概上世纪七十年代,Xerox PARC的Trygve提出了MVC的概念,并应用在Smalltalk系统中,为了和其它类型的MVC加以区分,历史上习惯的称之为Classic MVC。
 Classic MVC关注两个分离:从Model中分离View以及从View中分离,ControllerClassic MVC并不完美,不适用于复杂的逻辑。

1.2 Application Model MVC

 大概上世纪八十年代,ParcPlace从Xerox Parc划分出来,负责Smalltalk的研发工作,为了适应更复杂的逻辑,开发了Classic MVC的改进版,也就是Application Model MVC。在原有架构基础上引入了Application Model,在Model和View、Controller之间扮演着一个中继者的角色。
 缺点在于:随着以微软视窗为主的图形化操作系统的兴起,操作系统本身提供了一套原生的View接口,用来截获用户通过鼠标或键盘发出的请求,结果让Controller显得多余了。其次,Application Model不能直接操作View,所以某些情况下不能方便的实现业务逻辑。

1.3 MVP

 上世纪九十年代,IBM的Mike Potel提出了MVP的概念。Smalltalk团队决定使用它,出于复杂度的关系,他们简化了MVPView截获用户请求,然后委派给Presenter,Presenter改变Model的状态,Model通过Observer Synchronization通知View自己的状态发生了变化,View查询Model展现数据。

1.4 Web MVC

 Java是Web MVC最早的实践者,开发出Model 2,使用JavaBean,JSP,Servlet分别对应MVC中的三个组成部分,紧接着Structs的出现开始让大众注意到Web MVC。
 其中,Controller截获用户发出的请求、调用Model完成状态的读写操作、把数据传递给View,View则渲染最终结果并呈献给用户。

2.Struts和SpringMVC的关系及区别

2.1Struts简介

在这里插入图片描述

 它通过采用Java Servlet/JSP技术,实现了基于Java EE Web应用的MVC设计模式的应用框架,是MVC经典设计模式中的一个经典产品。
 Struts的优点主要集中体现在两个方面,Taglib和页面导航。Taglib是Struts的标记库,灵活多用,能大大提高开发效率。

2.2 关系以及区别

 Struts和SpringMVC一样都是表示层的架构,Struts入口是过滤器,基于类级别,一个接口一个类(Action)。SpringMVC入口是Servlet,基于方法级别。早期Struts、Spring、Hibernate组成的SSH开发框架,后面流行Spring、Springmvc、Mybatis组成的SSM架构。
 机制上,SpringMVC的入口是Servlet,而Struts2是Filter,这样就导致了二者的机制不同。性能上,Spring会稍微比Struts快。SpringMVC是基于方法的设计,而Sturts是基于类,每次发一次请求都会实例一个Action,每个Action都会被注入属性,而Spring基于方法,粒度更细。处理Ajax请求上,Spring3 MVC的验证也是一个亮点,支持JSR303,处理Ajax的请求更是方便,只需一个注解@ResponseBody ,然后直接返回响应文本即可。

3. 总结

 MVC框架是软件开发过程中的实用设计典范,虽然对于程序员来说增加了代码的工作量以及系统结构的复杂性,但是其拥有提高代码重用性、构建低耦合度的组件、控制器提高应用程序的灵活性和可重用性的优点。综合来讲对于程序员开发软件,仍然是利大于弊,广泛的使用甚至方便了项目代码的可读性,便于不同程序员看懂对方开发的项目,长远来看,大大提高了后期软件开发的效率。

参考文献
[1] LA0WAN9.MVC演化史[EB/OL].(2021-12-14).
https://cloud.tencent.com/developer/article/1918032
[2] 小麦大大.mvc框架优缺点[EB/OL].(2018-09-11).
https://blog.csdn.net/qq_35433716/article/details/82627221
[3] 慕后森.同为框架,Struts2和SpringMVC比较的区别![EB/OL].(2018-06-29).https://www.imooc.com/article/39834
[4] matthewfly.spring、springmvc、 springboot、 struts区别[EB/OL].(2021.01.15).https://www.jianshu.com/p/602e7ebfb541

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/z1076233241/article/details/134655014

智能推荐

前端开发之vue-grid-layout的使用和实例-程序员宅基地

文章浏览阅读1.1w次,点赞7次,收藏34次。vue-grid-layout的使用、实例、遇到的问题和解决方案_vue-grid-layout

Power Apps-上传附件控件_powerapps点击按钮上传附件-程序员宅基地

文章浏览阅读218次。然后连接一个数据源,就会在下面自动产生一个添加附件的组件。把这个控件复制粘贴到页面里,就可以单独使用来上传了。插入一个“编辑”窗体。_powerapps点击按钮上传附件

C++ 面向对象(Object-Oriented)的特征 & 构造函数& 析构函数_"object(cnofd[\"ofdrender\"])十条"-程序员宅基地

文章浏览阅读264次。(1) Abstraction (抽象)(2) Polymorphism (多态)(3) Inheritance (继承)(4) Encapsulation (封装)_"object(cnofd[\"ofdrender\"])十条"

修改node_modules源码,并保存,使用patch-package打补丁,git提交代码后,所有人可以用到修改后的_修改 node_modules-程序员宅基地

文章浏览阅读133次。删除node_modules,重新npm install看是否成功。在 package.json 文件中的 scripts 中加入。修改你的第三方库的bug等。然后目录会多出一个目录文件。_修改 node_modules

【】kali--password:su的 Authentication failure问题,&sudo passwd root输入密码时Sorry, try again._password: su: authentication failure-程序员宅基地

文章浏览阅读883次。【代码】【】kali--password:su的 Authentication failure问题,&sudo passwd root输入密码时Sorry, try again._password: su: authentication failure

整理5个优秀的微信小程序开源项目_微信小程序开源模板-程序员宅基地

文章浏览阅读1w次,点赞13次,收藏97次。整理5个优秀的微信小程序开源项目。收集了微信小程序开发过程中会使用到的资料、问题以及第三方组件库。_微信小程序开源模板

随便推点

Centos7最简搭建NFS服务器_centos7 搭建nfs server-程序员宅基地

文章浏览阅读128次。Centos7最简搭建NFS服务器_centos7 搭建nfs server

Springboot整合Mybatis-Plus使用总结(mybatis 坑补充)_mybaitis-plus ruledataobjectattributemapper' and '-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏3次。前言mybatis在持久层框架中还是比较火的,一般项目都是基于ssm。虽然mybatis可以直接在xml中通过SQL语句操作数据库,很是灵活。但正其操作都要通过SQL语句进行,就必须写大量的xml文件,很是麻烦。mybatis-plus就很好的解决了这个问题。..._mybaitis-plus ruledataobjectattributemapper' and 'com.picc.rule.management.d

EECE 1080C / Programming for ECESummer 2022 Laboratory 4: Global Functions Practice_eece1080c-程序员宅基地

文章浏览阅读325次。EECE 1080C / Programming for ECESummer 2022Laboratory 4: Global Functions PracticePlagiarism will not be tolerated:Topics covered:function creation and call statements (emphasis on global functions)Objective:To practice program development b_eece1080c

洛谷p4777 【模板】扩展中国剩余定理-程序员宅基地

文章浏览阅读53次。被同机房早就1年前就学过的东西我现在才学,wtcl。设要求的数为\(x\)。设当前处理到第\(k\)个同余式,设\(M = LCM ^ {k - 1} _ {i - 1}\) ,前\(k - 1\)个的通解就是\(x + i * M\)。那么其实第\(k\)个来说,其实就是求一个\(y\)使得\(x + y * M ≡ a_k(mod b_k)\)转化一下就是\(y * M ...

android 退出应用没有走ondestory方法,[Android基础论]为何Activity退出之后,系统没有调用onDestroy方法?...-程序员宅基地

文章浏览阅读1.3k次。首先,问题是如何出现的?晚上复查代码,发现一个activity没有调用自己的ondestroy方法我表示非常的费解,于是我检查了下代码。发现再finish代码之后接了如下代码finish();System.exit(0);//这就是罪魁祸首为什么这样写会出现问题System.exit(0);////看一下函数的原型public static void exit (int code)//Added ..._android 手动杀死app,activity不执行ondestroy

SylixOS快问快答_select函数 导致堆栈溢出 sylixos-程序员宅基地

文章浏览阅读894次。Q: SylixOS 版权是什么形式, 是否分为<开发版税>和<运行时版税>.A: SylixOS 是开源并免费的操作系统, 支持 BSD/GPL 协议(GPL 版本暂未确定). 没有任何的运行时版税. 您可以用她来做任何 您喜欢做的项目. 也可以修改 SylixOS 的源代码, 不需要支付任何费用. 当然笔者希望您可以将使用 SylixOS 开发的项目 (不需要开源)或对 SylixOS 源码的修改及时告知笔者.需要指出: SylixOS 本身仅是笔者用来提升自己水平而开发的_select函数 导致堆栈溢出 sylixos

推荐文章

热门文章

相关标签