刚接手公司中台后台项目那会,组长扔来一堆前端工程模板,张口就问前端mvc框架有哪些,当时手里堆着三个待开发的后台页面,盯着框架清单半天摸不清取舍标准,干脆拉着后端同事开了半小时临时评审会,挨个把市面主流框架落地感受捋了一遍。
Vue完整生态自带分层设计逻辑,本质就是落地成熟的前端MVC方案,当年项目里大面积使用Vue2搭配Vuex,视图层单独封装页面组件,控制器交由路由守卫与页面逻辑钩子承接,Model层靠Vuex统一管理全局数据,小到表单弹窗大到数据看板,这套分层逻辑都能顺畅跑通。但上线后才发现,中大型长列表页面渲染卡顿问题频繁出现,代码拆分之后维护成本反而上升,大量重复的状态分发逻辑铺满业务文件。
React没有原生绑定MVC分层规范,不少前端团队会手动搭建完整MVC架构,Redux充当数据模型层,页面组件负责视图渲染,自定义工具函数与路由拦截承担控制器职责。前两年接手外包政务项目时试过这套方案,页面复用组件的逻辑十分清晰,多终端适配的改写工作量很小,可从零搭建分层架构需要耗费大量前期工时,新人入职上手要花一周时间梳理数据流走向,中小型业务项目完全没必要投入这类开发成本。
Angular是原生集成MVC设计模式的前端框架,框架内部自带服务、组件、模块三大核心分层,天然匹配MVC的视图、控制器、模型划分逻辑,不用开发者手动拆分文件结构。去年帮朋友优化政企管理系统,整套项目全部基于Angular14开发,后台权限管控、接口请求封装全部依托框架内置服务完成,代码规范统一度极高。缺点也十分突出,框架版本迭代跨度大,旧版本项目升级会出现大量语法报错,打包构建的体积远超同量级Vue项目,移动端轻量化业务基本不会选用。
Svelte没有虚拟DOM机制,官方推荐的分层写法贴合MVC开发思路,数据变量充当模型,页面模板作为视图,脚本逻辑承接控制器职能。个人私活做过两个小型后台管理系统,用Svelte开发时代码行数压缩明显,打包后的文件体积极小,打开页面加载速度肉眼可见变快。可生态配套工具太少,复杂表单校验、大屏可视化这类拓展功能,只能自己手写原生代码补足,团队协作开发时没有统一的代码约束规范,多人迭代同一页面极易出现逻辑冲突。
折腾好久才搞明白,没有哪款前端MVC框架能适配所有业务场景,小体量后台单页项目优先选Svelte,常规企业中台项目用Vue生态足够稳妥,政企大型长期维护系统可以选用Angular,需要跨端适配的复杂业务再考虑React手动搭建MVC架构。
那天下班前整理框架选型笔记,桌面浏览器还开着四个框架的官方文档页面,鼠标滑动翻看着各个框架的分层示例,只觉得当初对着框架清单犯难的模样格外可笑。