MVC的历史和发展

MVC的历史和发展

  • 1.MVC的历史和发展
    • 1.1 Classic MVC
    • 1.2 Application Model MVC
    • 1.3 MVP
    • 1.4 Web MVC
  • 2.Struts和SpringMVC的关系及区别
    • 2.1Struts简介
    • 2.2 关系以及区别
  • 3. 总结

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简介

MVC的历史和发展_第1张图片

 它通过采用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

你可能感兴趣的:(mvc,java)