从MVC到现代Web框架

栏目: 后端 · 发布时间: 6年前

内容简介:模型 - 视图 - 控制器(MVC)是软件架构中最广泛和最有影响力的模式之一。尽管MVC的传闻1978年,Trygve Reenskaugh和Adele Goldberg创造了“模型 - 视图 - 控制器”的名称。Trygve相信MVC及其变体形成了一种模式语言,一种让人们谈论问题及其解决方案的共享语言。软件模式语言的概念也影响了Gang of Four编写Design Patterns一书。如果MVC被包含在Design Patterns一书中,我们可能会在

模型 - 视图 - 控制器(MVC)是软件架构中最广泛和最有影响力的模式之一。尽管MVC的传闻 死亡 ,它仍然是一个有用的模式来 理解 。在这篇文章中,我将重点介绍它如何演变成我们今天所熟知和喜爱的现代Web框架,而不是控制MVC的各种定义。

盗梦空间

1978年,Trygve Reenskaugh和Adele Goldberg创造了“模型 - 视图 - 控制器”的名称。Trygve相信MVC及其变体形成了一种模式语言,一种让人们谈论问题及其解决方案的共享语言。软件模式语言的概念也影响了Gang of Four编写Design Patterns一书。如果MVC被包含在Design Patterns一书中,我们可能会在 Behaviora l Pattern部分找到它,并在Mediator和Observer等模式中使用。

这是Trygve在2003年的回顾性论文, MVC,它的过去和现在 。Trygve列举了构成MVC模式语言的11种模式。

原生MVC

在接下来的几十年中,随着这些系统的发展和快速发展,MVC在Smalltalk和Mac OS和Windows应用程序中的使用寿命更长。后来,当智能手机开始出现时,Windows Mobile和 早期版本iOS的 原生移动应用程序也依赖于MVC及其变体。在微软,MVC后来发展成为 MVVM ,它为WPF,Silverlight和Xamarin等项目提供支持。

Web MVC​​​​​​​

在2000年代早期,几个重要的Web框架采用了MVC的模式语言:Spring,Ruby on Rails,PHP和ASP.net。这些框架为Controller添加了新的责任:处理初始HTTP请求。它是这样的:

从MVC到现代Web框架 Controller现在是应用程序的入口点,而不是View。

View的职责也发生了变化:它不是直接向用户呈现内容并处理输入,而是为浏览器组装一组HTML,JS和CSS以进行渲染。

HTML / JS将包含按钮单击处理程序之类的逻辑,它将通过XMLHttpRequest将操作发送回控制器。

请注意,浏览器中没有明显的MVC模式。随着现代网络框架的出现,这很快就会改变。

现代Web框架

随着浏览器大战的解决,我们终于得到了很好的东西:XMLHttpRequest,稳定的DOM API,ES6等。随着这种增强的功能和灵活性,公司开始构建越来越复杂的Web应用程序(有时称为 单页 应用程序 -SPA ),而不是相关的简单网页集。现代Web框架有助于组织这种日益增加的客户端复杂性,并使应用程序开发保持可预测和高效。

通常,这些框架引入了额外的构建步骤来创建HTML,JS和CSS的静态包,通过简单的“视图控制器”(通常是/或/index.html处理程序)直接托管。这些资源的静态特性意味着我们可以设置缓存控制头并依赖CDN来帮助以更低的延迟提供服务。这些单页应用程序包含用于针对“API控制器”服务的一组资源发出HTTP API请求的逻辑(在JS中),这些资源通常使用JSON进行响应:

从MVC到现代Web框架

这就把我们带到了今天: ReactVueAngular 是最受欢迎的现代网络框架。这些框架对MVC的组织模式有多相似?所有都有某种“视图”,因此任何比较都需要在下一层完成:状态(=模型),中介逻辑(=控制器)和绑定同步。

Vue是最直接的:它的文档明确指出Vue是MVVM的一个实现。Angular 默认也是MVVM-ish。然而,React是使用一种名为Flux的超级模式从垂死之星的核心锻造的:

Flux是关于单向数据流的。回想一下,MVC中的Model表示将由View呈现的持久数据。Flux分割MVC模型的职责; 它使用Actions / API来处理业务逻辑,使用“Store”来处理状态。您可以将Store视为整个应用程序的整体被动Passiv模型。

为什么Flux采用单向数据流?理由如下:随着应用程序的复杂性增加,使用视图更新管理状态更改变得越来越困难,特别是如果这些更改来自不同的来源。

与数据绑定相反,View会观察ViewModel的可变实例以进行属性更改, React会创建一个新的View作为不可变State / props的函数 ,View永远不必担心本地状态的变化。应用程序只能通过在状态树中创建新的Model实例来更改,当React想要更新应用程序时,它会用新对象替换其状态树的一部分,从而触发创建新的View。

虽然单向数据流是一个强大的概念,但它不是一个装满银子弹的免费午餐盒,也不会将React / Flux提升到与Angular / Vue 不同的强大水平

banq注:作者显然没有从函数式编程去理解React.JS,Angular / Vue还是属于面向对象OO世界,包括MVC模型。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

重来

重来

[美] 贾森·弗里德、[丹] 戴维·海涅迈尔·汉森 / 李瑜偲 / 中信出版社 / 2010-10 / 36.00元

大多数的企业管理的书籍都会告诉你:制定商业计划、分析竞争形势、寻找投资人等等。如果你要找的是那样的书,那么把这本书放回书架吧。 这本书呈现的是一种更好、更简单的经商成功之道。读完这本书,你就会明白为什么计划实际上百害而无一益,为什么你不需要外界投资人,为什么将竞争视而不见反倒会发展得更好。事实是你所需要的比你想象的少得多。你不必成为工作狂,你不必大量招兵买马,你不必把时间浪费在案头工作和会议......一起来看看 《重来》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具