MVC到MVVM,工程化开端

251 阅读3分钟

HTML工程师?

在前后端不分离的架构模式下,前端的工作往往只是只是简单的写写页面,也就是我们口中的‘切图仔’,所以招聘市场上甚至存在专门的类似html(5)工程师这类岗位。
这种架构模式下由前端编写html页面,css样式,js逻辑,然后统统交付给后端,后端将静态资源的处理同步更新到模板引擎使用的各个页面模板中,并插入依赖的js与样式文件外链,最后由后端进行项目的部署上线发布。

MVC

无标题-2022-04-08-1552.png

在MVC模式下,view对应的是用户视图数据,web应用下即html,css,js,图片等资源;而对于controller和model的职责则存在一定的争议,有的观点认为controller是model-view连接的桥梁,只负责控制路由行为,更多的承担一个请求转发交由model处理的职责,是轻量的,而model则负责具体的数据维护,定义了对应数据业务处理的逻辑,负责将处理状态响应给view;另一种观点则是认为将数据相关的业务逻辑交由controller处理,model仅仅负责执行数据操作指令,此时controller是重业务属性的。
如何处理controller和model的业务侧重,笔者更认同第一种观点,controller更多的是负责路由控制与转发,model层的数据处理,可以用更多的单独的业务处理类来进行管理维护,即model层再进行业务分层处理数据。

两种交互模式:
1. 浏览器url切换:从controller转发到指定model路由,model层处理业务数据,拿到数据之后通过模板引擎整合数据和界面生成html数据流返回controller,之后响应回浏览器,呈现view视图;
2. 用户操作:input,button之类的DOM事件,通过绑定js交互逻辑发送ajax请求,controller接收ajax请求,交由model层处理数据变更,再反馈到用户界面。

不管是哪种交互,所有的通信都是单向的。

这种架构模式存在以下一些问题:

  • 对前端而言,动态页面大部分基于jQuery框架,大量的DOM操作逻辑,影响页面性能;
  • 前后端代码放在一个项目工程部署,静态资源的请求会带来更大的连接开销和服务器压力,一挂前后端服务全挂,容灾性低。
  • 代码耦合,前后端代码通过模板引擎粘合,开发理解成本与系统复杂度上升。

随着web互联网的爆炸式发展,对于用户体验和交互越来越被重视,对前端的要求也不仅仅是以往的页面切图,项目迭代周期要求更快,前后端分离成为越来越多公司的技术选择。

MVVM


无标题-2022-04-08-1552.png

MVVM可以说是专门为前端工程设计的一个架构模式,在MVVM模式下,后端不必关注前端View层的处理,只关心业务逻辑与数据,后台不再通过模板引擎直接操作View层。
同时,前端接管了模板引擎的整合数据返回html数据流的工作,前端从后端获取model层数据做二次封装,以生成符合view层使用预期的视图数据模型。视图状态和行为都封装在view-model中,这样的封装使得view-model可以完整地去描述view层。

在MVVM大架构下,前端的技术发展日新月异,jQuery因繁重的DOM操作以及弱复用性逐渐退出前端舞台,随着而来的Angular, React、Vue渐渐成为主流,组件化成为新的前端开发模式,工程化走向开始。