2. 架构分层总览:核心职责与边界

离线优先架构的核心是将网络通信从业务逻辑中彻底解耦。为实现这一目标,本课程定义五层结构:表现层、离线逻辑层、同步层、存储层、网络监控层。每一层都有明确的职责边界、对外契约与信任链路,共同支撑“离线可用、在线同步”的用户体验目标。

层级 核心职责 对外暴露接口(概念) 关键依赖
表现层 驱动 UI 状态,展示乐观更新结果,绑定数据与视图 用户操作事件、状态回调 依赖离线逻辑层获取数据
离线逻辑层 编排业务用例,管理命令队列,维护一致性与冲突策略 命令提交、观察者查询 依赖存储层持久化,依赖同步层收发
同步层 管理网络连接池,执行增量/全量同步,适配远端协议 变更集推送、同步状态回调 依赖存储层读取待同步数据
存储层 本地持久化,索引构建,离线查询支持 CRUD 接口、事务支持 无上层依赖,是被依赖方
网络监控层 检测网络连通性,估算带宽与延迟,下发状态策略 连接状态事件(onConnect/onDisconnect) 依赖系统 API,为各层提供信号
架构边界原则: 表现层不直接调用同步层;离线逻辑层是唯一的中介。网络监控层只发事件,不参与业务决策。
离线友好网络层架构:数据流与控制流 离线友好网络层架构:数据流与控制流 用户操作 表现层(UI / ViewModel) 离线逻辑层(UseCase / 队列) 核心编排器 / 一致性协调 同步层(Sync Engine) 协议适配 / 增量同步 存储层(DB / Cache) 本地持久化 / 索引 网络监控层 连通性检测 / 策略下发 用户事件 命令 / 查询 持久化 / 读取 构建变更集 接收远程数据 远端 API 连接状态信号 策略下发 关键控制流说明 1. 用户操作 -> 表现层 (乐观更新) -> 离线逻辑层 (写入队列并持久化) 2. 网络监控层检测到连通 -> 通知离线逻辑层 -> 触发同步层从存储层拉取变更集 -> 推送至远端

边界与组件契约(信任链路)

  • 表现层 ↔ 离线逻辑层: 表现层信任离线逻辑层返回的数据一定是“当前最新的本地状态”,不关心该状态是来自缓存还是刚刚同步完成。离线逻辑层信任表现层发出的命令是合规的业务请求。
  • 离线逻辑层 ↔ 同步层: 离线逻辑层负责生成“变更集”并放入待发送队列,同步层负责消费。同步层不应反向修改业务队列,只能通过回调通知发送结果(成功/冲突/失败)。
  • 离线逻辑层 ↔ 存储层: 存储层保证持久化。离线逻辑层信任数据写入后即可用于查询,但必须处理写入失败(如磁盘满)的降级逻辑。
  • 网络监控层 → 各层: 单向无阻塞信号。各层信任监控层下发的状态(如onWiFiConnected),但必须自行处理信号抖动(如多次快速切换的防抖保护)。
信任链路设计要点: 层间通信必须基于明确的接口契约(Interface / Protocol),避免跨层直接操作数据。离线逻辑层是唯一有权启动事务和协调一致性的组件。

选型权衡与核心风险点

层级 关键权衡点 核心风险
表现层 乐观更新粒度:整体页面更新 vs 细粒度字段更新 乐观状态与持久化状态不一致导致 UI 闪烁或数据丢失
离线逻辑层 队列一致性:立即写入 vs 批量合并写入 队列积压导致内存溢出;顺序依赖操作导致死锁
同步层 冲突策略:Last-Write-Wins vs 自定义合并 / 拉分支 简单策略导致数据覆盖;复杂策略导致开发成本剧增
存储层 索引策略:多索引 vs 单索引 + 内存排序 写入放大严重拖慢插入速度;索引不足导致查询性能退化
网络监控层 检测频率:实时短间隔 vs 长间隔保电 频繁唤醒导致设备耗电;间隔过长导致同步不及时
架构级风险提醒: 各层耦合边界模糊是离线架构失败的首要原因。特别是离线逻辑层错误地承担了同步层的调度职责,或存储层直接暴露事务细节给表现层,都会导致架构退化。

落地步骤与验收标准

建议分 4 步落地:

  1. 定义层间接口契约: 使用接口定义语言(IDL)或严格的数据类(Data Class),明确每一层的输入输出。不跨层引用内部实现。
  2. 实现网络监控层 + 存储层: 这两层是基础依赖,先行实现并单测覆盖边界情况(如信号频繁切换、存储空间满)。
  3. 构建离线逻辑层核心编排: 先实现命令队列与本地一致性,再接入同步层做端到端联调。
  4. 表现层与隐式同步接入: 表现层只绑定离线逻辑层暴露的State/Domain Model。同步过程对UI完全透明。

验收标准清单:

  • 边界闭合: 替换存储层实现(如从SQLite切换到MMKV)不影响离线逻辑层与同步层代码。
  • 离线韧性: 无网络环境下,所有核心链路均可完成操作并正确持久化。
  • 状态一致性: 网络恢复后,本地数据与远端数据最终一致(允许秒级延迟)。
  • 性能基准: 列表页离线查询 < 100ms;命令队列处理 < 5ms/条(在主流中端设备上)。
  • 节能表现: 后台同步时,系统监控无异常耗电(续航衰减 < 5%/h)。