本篇要回答的问题:浏览器从技术上带来了两件事——跨平台桌面开发与 Web(B/S)开发。前者为什么至今无解?后者下 MVC 又会演变成什么样的架构?
上一讲我们聊了浏览器以及小程序与 PWA 之争。把浏览器的技术贡献拆开看就是两点:跨平台桌面程序开发、Web 开发。本讲分别给出这两件事的架构建议。
跨平台桌面程序开发
关键判断:跨平台桌面开发是一个超级难题,无数人前仆后继,至今没有真正深入人心的方案。根因是桌面程序本身的范畴在变。
造成巨大差异性的两个关键因素:
| 因素 | 为何带来跨平台成本 |
|---|---|
| 操作系统 | 不同 OS 抽象的界面框架不一致;放弃一个 OS = 放弃一个流量入口与用户,只能都支持 |
| 屏幕尺寸 | 同一 OS 在不同尺寸屏上交互范式差异巨大 |
把"平台"沿这两个维度铺开:
| 维度 | 取值 |
|---|---|
| 操作系统 | PC 本地:Windows/macOS/Linux;PC Web:Chrome/Safari/FireFox;Mobile 本地:Android/iOS;Mobile Web:小程序/PWA |
| 屏幕尺寸 | 大屏:PC/笔记本/Pad;中屏:手机;小屏:手表 |
关键洞见:关于跨平台有一句话特别深刻——“每一次统一的努力,都最终变成新的分裂”。目前还很难说哪个方案会胜出,但跨平台的梦还会继续。
Web 开发
Web 的 B/S 架构意味着更高的复杂性,主要表现在三方面:
| # | 复杂性 | 说明 |
|---|---|---|
| 1 | 多用户 | 数据从 Client 端转到 Server 端 |
| 2 | 更高数据可靠性要求 | 数据在 Server 端,丢数据的责任方变成软件厂商 |
| 3 | 更多分工安排 | 分为胖前端与胖后端两大流派 |
| 流派 | 含义 | 体验 |
|---|---|---|
| 胖前端 | 尽量多业务逻辑放前端,极端即单页应用 | 开发/用户体验接近 Native App |
| 胖后端 | 主要逻辑在后端,连交互事件响应也走网络交给后端 | —— |
浏览器端:MVC 变成 MVMP
关键判断:浏览器下 HTML+CSS 是 ViewModel 层(完整描述了界面的样子),View 层已被浏览器实现。于是 MVC 演变为 MVMP(Model-ViewModel-Presenter)。
演变推导:
| 环节 | 标准 MVC | 浏览器下的实际做法 |
|---|---|---|
| 事件响应 | View 收事件 | View 收事件后委托给 ViewModel,经 HTML DOM 的 onXXX(如 onclick)暴露 |
| DataChanged | Model 通知 View | View 由浏览器实现无法接收 → 改由 Controller 监听(即 MVP) |
| Update View | 操作 View | Presenter 更新的是 ViewModel 而非 View |
| 结论 | MVC | MVMP |
服务端架构梳理
Web 开发同样需要二次开发接口(API),只不过它从 Client 端挪到了 Server 端,以支持自动化(Automation)。服务端分层:
| 层 | 假设 | 职责 |
|---|---|---|
| Multi-User Model(最底层) | 多租户 | 实现自动化所需的 API |
| Web 层 | 基于会话(Session-based) | 负责用户接入,每个登录用户形成一个 Session |
| └ Session-based Model | 单租户 | Multi-User Model 的转译层,代码很少,理论上可自动实现 |
| └ Session-based ViewModel | 单租户 | 一些 HTML+JS+CSS 文件,是真正的 Web 业务入口 |
关键洞见:服务端的 Session-based Model 与 Session-based ViewModel 不直接关联,而是各自通过网络遥控浏览器一侧的 Model 与 ViewModel,从而响应用户交互。
总结
浏览器带来的两件事,跨平台至今无解(“每次统一都变成新的分裂”),而 Web 开发把单机的 MVC 演变为 MVMP——但无论哪边,建议始终一致:认真对待 Model 层,把它做厚。
先把"是什么"回答清楚
| 概念 | 一句话说明 |
|---|---|
| 跨平台难点 | OS 不一致 + 屏幕尺寸不一致,且桌面范畴本身在变 |
| 胖前端 / 胖后端 | 业务逻辑放前端(近 Native)/放后端(连事件响应都走网络) |
| MVMP | 浏览器下的 MVC:HTML+CSS 是 ViewModel,Presenter 更新 ViewModel 而非 View |
| Multi-User Model | 服务端最底层,多租户,实现自动化 API |
| Session-based Model | Multi-User Model 转译成单租户的薄层 |
一句话速记
跨平台"每次统一都变成新的分裂";Web 下 MVC 变 MVMP(HTML+CSS 当 ViewModel、Presenter 改 ViewModel),但无论单机还是 Web,建议都是——把 Model 层做厚。
几条值得记住的判断
- “每一次统一的努力,都最终变成新的分裂”——跨平台尤其如此。
- 浏览器下 View 层被浏览器接管,HTML+CSS 是 ViewModel 而非 View。
- Web 的 API 从 Client 端搬到了 Server 端,由 Multi-User Model 承载自动化需求。
思考题
文中说服务端的 Session-based Model 只是 Multi-User Model 的"转译层"、理论上可自动实现。回到你的项目:你的"单租户视图"是手写堆砌的,还是能由多租户 Model 自动转译出来?如果不能,是哪里的耦合阻碍了它?



