为什么前端模型-视图-控制器MVC会死?

越来越越多的前端开发人员采用React.js+Redux这样的单向架构,因此,经典的模型视图控制器MVC模式未来会怎么样呢?

那我们先回顾一下前期架构的发展。在过去的四年中,我一直在大量的Web项目中花费了大量时间设计前端和集成框架。在2010年以前javascript都是使用JQuery。自此以后,开发人员开始考虑使用单页应用。Backbone和Knockout开始流行。

那时这些框架许多原理还是相当新的,所以设计者得从其他地方寻找来灵感,他们从服务器后端借用了最佳实践。当react.js首次出现的时候,很多开发人员嘲笑它,因为它的一些行为在处理html和javascript时是反直觉的。但是他们忽略了react的重要贡献,就是带来了基于组件的架构。

react并没有发明组件,而是把这一想法深入下去。

这一突破的想法却被facebook忽视了,所以他们宣传react时,还是把它作为mvc的v。

2015年带来了思想上面的重要突破从熟悉的mvc模式到单向架构和数据流。这是Flux和函数反映式编程,如Redux和RxJS。那么,mvc问题出现在哪里呢?

mvc仍然是服务器端好的框架,m v c在服务器端和客户端原理不同。

m v c的视图和控制器在服务器端是可以完全分离的,两者通过请求和响应联系。但是视图和控制器如果都在客户端,没有了请求和响应这样一进一出方向性的对象,只有一个事件,而且事件是可以双向进出,造成混乱,视图与控制器两者通过这些混乱的双向事件直接耦合在一起,控制器既处理界面事件,又处理业务逻辑,而模型要处理界面状态和应用状态,这些都违背了单一职责。

而react.js的flux事件单向流程简化双向事件的无序,使得数据流向变得清晰,再加上Redux将业务逻辑和应用状态从中分离,这样,应用状态业务逻辑和界面状态,事件处理以及视图都变成单独分离的组件,基于组件架构在前端客户端替代了MVC。

Is Model-View-Controller dead on the front end?