编码、架构与项目 · KNOWLEDGE CHAPTER
K31

架构决策与交付

架构决策是在具体约束下安排责任、依赖与退出路径。一个好方案要解释为什么这个边界值得存在、谁拥有状态和权限、怎样观察成效、失败时怎样退回;技术名称只能是实现这些责任的手段。

编码、架构与项目2 道章节练习5 道主练关联

核心模型

架构决策是在具体约束下安排责任、依赖与退出路径。一个好方案要解释为什么这个边界值得存在、谁拥有状态和权限、怎样观察成效、失败时怎样退回;技术名称只能是实现这些责任的手段。

原理与机制

从证据和约束定义问题

接手旧系统先收集用户故障、交付阻塞、依赖风险、测试缺口和性能基线,把目标写成可验证的行为与指标,并明确不改范围。介绍优化项目同样需交代用户、设备、样本窗口和自己的职责,比较候选方案及未选方案;没有同期对照或分层控制时,应报告相关改善而非编造因果。记录真实收益、代价、遗留问题和团队分工,才能让技术决策接受复查。

权限属于执行边界

多租户系统先区分身份、租户和资源动作。前端能力表控制菜单、路由和按钮,加载前默认拒绝以避免敏感闪现,但真正 API、导出与下载都须服务端授权。用户传来的 role、ownerId 或租户参数不能作为最终依据;操作期间撤权也要在执行时拒绝。切租户、登出和权限改变时隔离缓存、取消请求并妥善处理草稿,不要把完整后端策略复制到前端后任其漂移。验证矩阵应覆盖角色×租户×归属×资源状态。

拆应用先验证组织边界

微前端的理由是稳定业务边界和独立发布生命周期,不是代码目录大。先比较模块化单体和 monorepo,再确认平台维护能力。壳负责入口、路由、身份协议、观测和故障隔离,子应用通过版本化契约通信,避免共用可变全局 store。运行时组合增加远端脚本供应链、重复框架和兼容窗口成本;iframe 的安全取决于来源与 sandbox,Shadow DOM 主要封装样式和结构,不是执行不可信脚本的沙箱。先用低耦合模块试点,并设置退出条件。

渐进改造需要唯一写入口

沿低耦合边界做纵向切片,一阶段尽量只改一类变量。新旧系统可并行读取比较,但不应无条件同时拥有同一业务写权限;适配层定义输入输出与删除条件,防止永久双轨。迁移前补关键契约和端到端测试,列里程碑、责任人、依赖、失败阈值和回退动作。回退还包括资源保留、缓存、数据结构与正在运行的会话,不能删掉旧分块或破坏数据后只说 Git 可以回退。

故障处理完成设计的最后一环

白屏先判断影响用户、版本与开始时间,按权限暂停扩量或回滚并保留证据。沿 HTML→资源→模块执行→接口→渲染分层,检查失败 URL、状态码、响应类型、压缩堆栈和匹配 source map;资源 error、运行时 error 与 unhandledrejection 不是同一覆盖面。按相同缓存和设备重现,测试旧页跨发布、弱网和恢复,最终看任务成功率和错误率是否恢复。复盘将根因变成回归和发布约束,而不只清缓存。

最小示例

json
json
{
  "decision": "先迁移独立报表读取路径",
  "context": ["旧路由保留", "写操作仍由原服务唯一处理"],
  "contract": ["租户作用域", "版本化查询参数", "错误语义"],
  "evidence": ["跨租户授权测试", "新旧结果对照", "同设备延迟分布"],
  "stopWhen": ["数据隔离失败", "任务成功率低于已约定阈值"],
  "rollback": ["关闭新入口", "保留旧哈希资源", "核验用户流程恢复"],
  "removeAdapterWhen": "兼容窗口结束且旧调用已核验归零"
}

这个决策记录把范围、责任和退出条件绑定起来。观察点不是“使用了新框架”,而是读取结果、隔离和延迟是否满足约定。它没有假造收益百分比;数值与窗口必须在真实基线和业务容忍度确定后填写。

核验:严格JSON解析通过;此例为教学架构决策记录,不是已执行的迁移、授权或性能测试。

边界与取舍

边界

  • 隐藏按钮和路由守卫不能防直接调用 API;客户端 token 存在也不等于有资源权限。
  • 子应用样式隔离不等于安全隔离,壳与子应用共享可变 store 可能让独立发布失去意义。
  • 线上变快可能来自设备占比变化;代码回滚成功也不等于已经写坏的数据恢复。

取舍

  • 独立部署减少团队排期耦合,却增加版本、观测、认证协议与故障边界成本;要有持续维护预算。
  • 渐进切片降低单次风险,但兼容层会延长双轨期;以明确删除条件避免临时设施永久化。

口述示范

我会以问题证据和约束开始,比较最小可行改动,明确数据与权限责任,按切片建立测试和灰度。结果只报可验证事实,失败有兼容回退与用户恢复证据,而不是罗列工具。

章节练习

练习 1

三个团队都想独立发布,但所有页面共享同一可变 store,应直接引入微前端吗?

展开检查点
  • 先分析业务边界与协调成本,比较模块化单体。
  • 试点版本化协议与故障隔离,设置耦合未下降时的退出条件。
练习 2

假设 CSSLab 改造后桌面跑分快了,部分旧手机白屏,怎样形成可信交付结论?

展开检查点
  • 明确这是演练;按版本、设备、缓存分层定位资源和执行阶段。
  • 先止损,复现旧页跨发布;报告任务成功率与真实收益,不虚构个人成果。

参考来源与核验边界

2026-10-04 核验。示例是教学决策记录而非用户项目事实;微前端具体加载、隔离和路由行为须依所选实现及浏览器核验。

内容版本:2026-10-04.2 · 题目和来源 ID 保持原样,本站不将面经标签解释为企业官方出题或高频保证。