加载中...

本篇要回答的问题:浏览器从技术上带来了两件事——跨平台桌面开发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)

浏览器下的 MVMP 架构

演变推导:

环节 标准 MVC 浏览器下的实际做法
事件响应 View 收事件 View 收事件后委托给 ViewModel,经 HTML DOM 的 onXXX(如 onclick)暴露
DataChanged Model 通知 View View 由浏览器实现无法接收 → 改由 Controller 监听(即 MVP)
Update View 操作 View Presenter 更新的是 ViewModel 而非 View
结论 MVC MVMP

服务端架构梳理

Web 服务端架构分层

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 自动转译出来?如果不能,是哪里的耦合阻碍了它?

公告栏
这是我的个人知识库。
记录技术,也记录生活 —— 读过的、试过的、想明白的,都堆在这儿。
最新文章
网站资讯
文章数目 :
5
已运行时间 :
本站总字数 :
15.7k
本站访客数 :
本站总访问量 :
最后更新时间 :
全局知识图谱
当前页面 已访问 文章 标签
ESC 关闭 · 滚轮缩放 · 拖拽移动 · Ctrl+G 开关