《互联网产品的客户端架构·端形态与体验基础》附录 C 客户端架构评审清单

一份可直接用于客户端架构评审的清单:从评审前要准备的材料,到约束与端形态、质量预算、分层依赖、状态归属、路由与深链、数据离线、组件契约、构建产物、渲染路径、错误降级、观测与发布兼容十二个维度,每条给出判定标准与常见反例,并附十条自检总表与评审后的跟踪方式。

评审要解决的问题

架构评审最常见的失败,是开成了一场演示会:主讲人放完架构图,参会人点头,散会后没有人能说清楚“哪里可能出问题、出问题谁负责”。评审的价值不在于图好不好看,而在于把隐含假设摆到桌面上,让错误在写代码之前暴露。

这份清单面向客户端架构评审。它假设评审对象是一个准备进入开发或准备放量的客户端方案,包含端形态选择、分层与状态、路由与数据、构建与渲染、错误与观测、发布与兼容。评审不替代代码审查,也不替代性能测试;它检查的是“方向和边界是否成立”。

清单里的判定标准尽量写成可验证的陈述,常见反例来自真实项目里反复出现的模式。阈值、比例和耗时都是案例假设值,团队应替换成自己的预算,并把替换依据写进决策记录。

一次有效的评审需要三类角色:方案负责人讲清取舍,领域评审人提出反例与验证方式,记录人把缺口写成可跟踪的条目。角色可以由同一人兼任,但不能缺位。缺少记录人时,讨论再充分也留不下可执行的结论。

评审还需要时间盒。建议把大部分时间留给状态、数据、错误与兼容这四个最容易在线上出问题的维度,架构图讲解控制在很短的篇幅内。时间分配本身就是一种判断:如果一场评审大部分时间都在解释图,说明材料没有把关键决策写清楚。

评审前要准备的材料

材料不齐时,评审很容易变成“边问边想”。建议提前两天发出材料,并明确每份材料的负责人。

材料至少要回答的问题缺失时的后果
产品事实与约束用户在哪里、用什么设备、网络如何、是否离线端形态与默认策略没有依据
端形态选型记录为什么是 Web、原生、小程序或桌面后续能力边界争论反复出现
质量预算表首屏、交互、包体、内存、崩溃的目标无法判断方案是否可接受
模块依赖图分层、依赖方向、循环依赖处理分层规则只停留在口头
状态清单每个状态的归属、持久化与失效方式状态丢失与重复请求无法定位
路由与深链表路径、参数、登录拦截、兜底页深链与返回语义在开发中才发现
接口契约与错误码字段兼容、错误分类、超时与重试弱网与版本兼容没有设计输入
构建产物报告体积、分包、缓存策略、sourcemap包体与发布风险无法评估
渲染路径说明CSR、SSR、SSG 或流式,以及水合边界首屏与交互错位难以解释
错误与降级矩阵每类失败看到什么、能否恢复白屏与死循环在线上才暴露
指标字典与看板指标定义、分母、分位、负责人上线后无法判断是否变差
发布与兼容矩阵支持版本、灰度、回滚、强制升级新旧版本共存时互相破坏

材料不需要很厚,但每一份都要有结论和负责人。只有架构图、没有预算和状态清单的评审,通常只能讨论“看起来是否合理”。

分维度检查清单

下面十二个维度按依赖顺序排列:前面的决定会约束后面的选择。每个维度给出检查项、判定标准和常见反例。判定标准是“最低可接受”,不是“最佳实践”;团队可以更严格,但不能更模糊。

约束与端形态

检查项判定标准常见反例
产品事实是否显式网络、设备、中断频率、输入方式、离线要求都有取值用“用户主要在城市”代替具体网络与设备分布
端形态是否有依据选型矩阵给出能力、分发、更新、性能的对比与结论因为团队熟悉某个框架而选择端形态
禁用默认值是否列出离线、高中断等场景明确禁止某些默认做法只列“要做什么”,不列“不能怎么做”
降级路径是否存在低端设备有少加载、少动画、少并发的方案所有设备跑同一条最重路径

判定这份清单是否通过,只看一件事:换一个没参加讨论的工程师,能否根据材料复述“为什么是这个端形态、哪些做法被禁止”。复述不出来,说明约束还停留在个人理解里。

质量预算

检查项判定标准常见反例
指标是否可定义每个指标有起点、终点、分母与聚合方式只说“首屏要快”,没有指标与口径
预算是否有数值首屏、交互、包体、内存、崩溃都有目标值预算写成“尽量优化”
预算是否分层按设备档位、网络、路由给出不同目标用一个平均值覆盖所有用户
超标是否有动作超过预算时阻断发布、降级或限期治理预算只用于汇报,不进入门禁

预算的说服力来自“超标会怎样”。如果超标没有任何后果,它就不是预算,只是愿望。案例假设值:首屏 P75 目标 2.5 秒,超过则进入发布评审;这个数值本身不重要,重要的是它被写下来并有负责人。

分层与依赖

检查项判定标准常见反例
分层职责是否清楚视图、状态、领域、数据访问各自负责什么视图直接调用接口并处理重试
依赖方向是否单向外层依赖内层,内层不引用外层领域层引用 UI 组件或路由对象
循环依赖是否被拦截构建或测试能在合并前发现循环靠人工看图,合并后才发现
边界是否有测试分层规则有自动化测试或静态检查规则只写在文档里

分层不是画四层框,而是回答“这段代码允许知道什么”。允许知道得越少,替换与测试越容易。评审时可以直接问:把数据访问层换成另一个实现,需要改哪些文件?答案越集中,分层越成立。

状态归属

检查项判定标准常见反例
状态清单是否完整每个状态有归属、生命周期、持久化策略重要草稿只存在组件内存里
本地与共享是否区分临时 UI 状态不进入全局单例弹窗开关放进全局状态
服务端状态是否有缓存策略有失效、刷新、并发去重规则每个组件各自请求同一份数据
状态机是否有引入判据复杂流程有明确状态与非法转移处理用多个布尔值拼出隐式状态机

状态归属是客户端最早、也最难改的决定。评审时要特别追问“这个状态丢了会怎样”。答案如果是“用户要重填”,它就不该只存在内存里;答案如果是“无所谓”,它也不该被提升到全局。

路由与深链

检查项判定标准常见反例
哪些状态进 URL 有规则可分享、可恢复的状态进 URL所有筛选条件都塞进全局状态
返回语义是否定义页面栈的返回目标明确且可测试返回键有时回列表、有时退出应用
深链是否有兜底未匹配、失效、无权限都有落地页深链失败静默回首页
登录拦截是否保留目标登录后回到原始深链登录后统一回首页

深链测试要覆盖冷启动、热启动、已登录、未登录、旧版本五个组合。只测其中一个组合,等于没测。路由表应该是一份可执行的配置,而不是散落在各处的字符串拼接。

数据与离线

检查项判定标准常见反例
请求是否有预算超时、重试、并发上限、去重都有定义失败后立即无限重试
错误是否分类可重试、不可重试、结果未知分开处理所有错误都弹同一个提示
读路径是否有缓存兜底弱网与离线能返回可用内容无网时整页空白
写路径是否可恢复离线写入进入队列,冲突有解决策略乐观更新失败后状态不一致

数据层的评审重点是“不知道成功还是失败”这一种状态。服务端可以假设失败就是失败,客户端不行。任何写操作都要回答:请求发出但响应丢失时,用户看到什么、系统下次如何处理。

组件契约

检查项判定标准常见反例
输入输出是否稳定组件的 props、事件与副作用有明确契约组件内部直接读全局状态
受控边界是否清楚受控与非受控组件不混用同一份状态输入框同时由父组件和内部维护
可访问性是否覆盖键盘、焦点、语义标签、对比度有检查只用鼠标事件实现交互
组件是否可独立测试不依赖页面上下文即可验证核心行为测试必须启动整个应用

组件契约的价值在替换与组合。评审时可以问:这个组件能否在不了解页面路由的情况下被复用?如果答案是否定的,它可能是一个页面片段,而不是组件。

构建与产物

检查项判定标准常见反例
分包是否有依据按路由或能力拆分,首屏不加载非必要模块所有代码打进一个包
体积是否有预算入口、路由、依赖都有上限与告警只在发布后看总体积
缓存策略是否明确入口不缓存或短缓存,资源带指纹入口与资源使用同一长缓存
产物是否可分析有 sourcemap、体积报告与依赖清单线上问题无法定位到源码

构建评审要看“用户实际下载了什么”,而不是“源码里有什么”。一个依赖在开发环境很方便,进入产物后可能占掉首屏预算的一大块。体积报告应该按路由拆开,而不是只给一个总数。

渲染路径

检查项判定标准常见反例
渲染模式是否有理由CSR、SSR、SSG、流式与产品目标对应因为“流行”而选择 SSR
水合边界是否清楚服务端与客户端渲染结果一致首屏内容在客户端被整体替换
首屏与交互是否分开知道何时可见、何时可交互把“看见”当成“能用”
退出条件是否定义出现何种问题时应切换渲染模式选型一次后永不复核

渲染模式不是身份标签,而是首屏权衡。评审时要问:这个页面的主要内容能否在服务端确定?如果不能,SSR 带来的收益有限;如果能,水合不一致的风险是否有测试覆盖。

错误与降级

检查项判定标准常见反例
错误边界是否分层全局、路由、关键模块各有边界只有一个全局边界,一处异常全站白屏
失败是否有可恢复路径用户能重试、返回或继续使用部分功能失败后只剩一个转圈
降级内容是否可用弱网与接口失败时有缓存或占位内容降级页没有任何可操作入口
埋点丢失是否有补报关键事件持久化并支持下次补报应用被杀后事件永久丢失

错误处理的目标不是“没有错误”,而是“错误发生时用户仍能做点什么”。评审时要逐个走查关键路径:登录、首屏、下单、支付、消息发送,确认每条路径失败时都有明确的下一步。

观测

检查项判定标准常见反例
指标是否有字典定义、分母、分位、负责人齐全同一个指标在不同报表口径不同
关键路径是否可追踪从入口到核心动作有漏斗与耗时只知道总崩溃率,不知道哪一步流失
维度是否足够归因版本、设备、网络、路由可分层只有一个全站平均曲线
数据质量是否监控上报覆盖率、重复率、缺失率可见只统计上报成功的样本

观测的评审重点是“出了问题能不能看见、看见后能不能归因”。没有分母、没有分层、没有缺失率的数据,很容易给出错误的安全感。附录 A 的指标字典模板可以直接作为检查依据。

发布与兼容

检查项判定标准常见反例
兼容窗口是否明确支持哪些旧版本、多长时间默认用户都会升级
接口是否向后兼容新增可选、旧字段保留、枚举有默认分支新版本直接删除旧字段
灰度与回滚是否可行能按版本、人群、路由放量与回滚只能全量发布
强制升级是否有兜底不兼容时明确阻断并给出路径旧版本静默失败

发布不是“切换”,而是“新旧版本长期共存”。评审时要问:新服务端遇到旧客户端会返回什么?新客户端遇到旧服务端会显示什么?两个问题都能回答,兼容设计才算开始。

十条自检总表

如果评审时间有限,至少过一遍下面十条。每条都要有证据,不接受“应该没问题”。

序号自检问题通过标准需要的证据
1端形态选择有依据吗能引用产品事实与选型矩阵选型记录与约束清单
2质量预算可执行吗指标有口径、目标与超标动作预算表与门禁配置
3依赖方向守得住吗分层规则有自动化检查依赖图与测试结果
4关键状态丢得起吗不可丢状态已持久化并可恢复状态清单与恢复测试
5深链能到达目标吗冷热启动、登录前后都有兜底路由表与深链测试
6弱网下还能用吗读有缓存、写有队列、错误有分类降级矩阵与弱网用例
7首屏与交互分得清吗渲染模式有理由、水合有一致性检查渲染说明与对比数据
8出错后用户有路可走吗每类失败都有可操作提示错误边界与降级页
9出问题能看见吗指标有字典、分层与缺失率看板与数据质量报表
10旧版本还能活吗兼容窗口、契约测试、强制升级齐全兼容矩阵与回放结果

十条里任何一条答不上来,都不必继续讨论细节。先把缺口补成可验证的材料,再开下一次评审。

评审后的跟踪方式

评审的产出不是“通过”两个字,而是一份带负责人和截止时间的行动清单。建议用下面的字段记录,并放进同一个看板:

字段说明
编号稳定且可引用,例如 CR-001
问题一句话描述缺口,不写解决方案
级别阻断、重要、建议三档
证据材料位置、测试结果或现场复现步骤
负责人具体到人,不写团队
截止时间与发布节点绑定
验证方式用什么测试、报告或演示证明已关闭
状态未开始、进行中、待验证、已关闭

级别要有明确后果:阻断项未关闭不得进入发布;重要项允许带风险发布,但必须有降级方案与复查日期;建议项进入常规迭代,不占用发布窗口。级别由评审共识决定,不由主讲人单方面下调。

复查节奏建议与发布节奏绑定,而不是固定每月一次。每次发布前复查阻断项与重要项,发布后一周回看指标是否验证了评审假设。评审时认为“不会出问题”的地方,如果上线后指标变差,应该回到清单里补充检查项,而不是只修当前 bug。

关闭标准要写清楚:不是“代码已改”,而是“验证方式已执行且结果符合预期”。例如“补充深链测试”这条,关闭标准是测试用例在冷启动、热启动、登录前后四个组合都通过,而不是提交了一个测试文件。

评审记录还应放在团队能检索到的地方,并与发布记录、事故记录互相引用。这样下一次评审可以直接看到“上次担心的风险有没有发生”,而不是从零开始回忆。至少保留三类关联:

  • 本次评审的阻断项与重要项,关联到具体的发布单。
  • 上线后变差的指标,关联回对应的评审条目与假设。
  • 线上事故的根因,关联到清单中缺失或执行不到位的检查项。

关联做久了,清单会从一份通用模板,变成团队自己的风险地图:哪些维度反复出问题,哪些判定标准写得太松,都会在记录里显形。

常见错误与边界

  • 把评审当演示。没有判定标准与证据的评审,只能确认“图很完整”。
  • 材料临时准备。评审现场才第一次看到状态清单,无法形成有效判断。
  • 只查架构图,不查测试与产物。图可以很漂亮,依赖与体积不会因此变好。
  • 清单逐条打勾,不记录反例。打勾不等于通过,反例才是风险所在。
  • 没有级别与负责人。所有问题都“很重要”,最后没有一件被关闭。
  • 阻断项被随意降级。发布压力下下调级别,等于取消门禁。
  • 评审一次就结束。产品、设备与版本都在变,约束与预算需要复核。
  • 用清单替代思考。清单是提问的起点,不是架构的答案。

这份清单也有边界。它不覆盖具体框架的 API、不替代安全评审、不替代真机性能测试,也不保证评审通过的方案一定成功。它能做的是把常见缺口提前暴露,让团队在还有时间修改的时候看见它们。

小结

客户端架构评审的核心,是把“我们认为”变成“我们能证明”。约束、预算、分层、状态、路由、数据、组件、产物、渲染、错误、观测、发布,十二个维度各自回答一类问题;十条自检总表用于时间有限时的快速过筛;跟踪表用于保证问题不会停在会议室里。

评审通过不是终点。上线后的指标会检验评审时的假设,下一次评审应该带着上一次的结果回来。把这份清单与附录 A 的口径、附录 B 的排查手册一起使用,才能形成“定义、发现、修复、复核”的闭环。

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页

「books」更多文章

  1. 《互联网产品的 AI 架构·平台化与治理》附录 C 平台化评审清单
  2. 《互联网产品的 AI 架构·平台化与治理》附录 B 能力目录与配额字段速查
  3. 《互联网产品的 AI 架构·平台化与治理》附录 A 治理角色与职责速查