移动端架构体系(五):终篇总结

张开发
2026/4/13 11:07:38 15 分钟阅读

分享文章

移动端架构体系(五):终篇总结
程序员的高阶价值在哪里我想不单单是“写代码的执行者”更要成为“设计者、决策者、整合者”尤其在AI时代写代码门槛被大幅拉平这些能力显得尤为重要AI负责生成代码片段我们来搭建系统骨架成为优秀的架构与系统设计者我们要精准理解需求、定义需求与问题的边界把模糊的业务诉求转化为清晰的技术方案交由AI落地执行我们要成为数据模型工程与pipeline的搭建者。一句话总结懂业务、会架构、能工程化、善用AI。下面我将针对“搭系统骨架”这一核心深入聊聊移动端架构到底搭建的是什么。一、谈移动端架构我们在讨论什么很多移动端应用从用户路径看无非是调接口 → 展示列表/详情 → 跳转 → 再调接口 → 再展示。若只停留在这一层似乎“没什么可架构的”。但真正决定产品能否长期迭代、团队能否并行开发、线上问题能否快速收敛的是支撑这些路径的基础设施与协作方式。结合业界常见实践讨论移动端架构时通常至少覆盖以下几类问题维度典型问题网络如何安全、一致地调用 API弱网、超时、重试、缓存、鉴权如何统一界面页面/模块如何组织才能降低耦合、让业务开发专注需求而非胶水代码持久化本地数据如何分层缓存 vs 源数据、如何控制读写路径与一致性动态化审核周期下如何灰度、热修、配置驱动在合规与风险可控前提下工程与协作模块化边界、CI/CD、埋点与实验、多团队协作时的接口契约下面用一张简图概括用户眼中的路径与架构要垫的底子之间的关系架构工作就是把这条环路上的重复模式抽成稳定层把易变部分留给业务并把观测、测试、演进成本算进去。二、架构设计的一种方法自顶向下 自底向上 度量可概括为六步法则明确问题与对业务方的充要条件架构暴露给业务的接口应尽可能接近业务真正需要的最小信息。例如翻页不必强行暴露当前页码可提供 loadNextPage()读文件对上层不必暴露 buffer/size 等底层细节。参数越少、语义越清晰替换实现与演进成本越低。问题分类、分模块按职责切分网络、路由、UI 容器、领域模型、存储、埋点等避免一个大类干所有事。理清依赖、统一交流规范同类型问题用同一套模式例如统一用单向数据流或统一用 Repository 作为数据唯一入口避免同一项目里多种哲学并存导致认知负担。推演未来国际化、深色模式、平板适配、离线、A/B、多业务线并入同一 App 等是否在模块边界上留有余地。自底向上实现先搞定最基础的依赖先落地网络契约、错误模型、日志与路由等“地基”再堆业务实现过程中敢于调整设计。打点、单测、性能数据再优化客户端性能往往“重要但不必事事放在第一位”——在体验可接受的前提下优先保证迭代效率与可维护性优化应绑定度量启动、首屏、滑动掉帧、包体积、内存峰值等。一句话自顶向下想清楚模块与边界自底向上用真实代码验证用数据驱动优化。三、分层“几层”是结果不是起点不要为了三层 / 四层而三层 / 四层。更稳妥的做法是先列出要解决的问题与模块再归类归类后若自然形成三层就称为三层若某一层过大再拆出第四层例如把网络从“数据层”中独立出来。从角色角度很多系统都可以粗分为三类数据管理者 / 数据加工者 / 数据展示者数据与状态从哪里来、存哪里远程、本地、内存业务规则与用例校验、组合、权限如何呈现与交互UI、导航、动画这与 MVC / MVVM / MVI / Clean 等并不矛盾前者偏模块归类后者偏数据流动方向。实际项目里常常是模块分层 某种 UI 数据流模式的组合。四、什么是“好架构”4.1 结构清晰慎用“万能目录”代码整齐、分类明确一个模块 / 类最好只做一类事单一职责原则。谨慎使用 Common / Core 大杂烩小模块可以独立成极小模块甚至只有两个文件用依赖声明明确引用而不是全部扔进 Common。Common 容易纵容横向依赖与粒度失控后期拆分成本极高含多 App、多 Pod 场景。4.2 低文档依赖的上手体验API 命名即文档类型明确避免滥用 id / 弱类型回调方式在同一域内保持一致。举例Objective-C 风格思想适用于 Kotlin/Swift// 更可读语义与类型清晰-(NSDictionary*)exifDataOfImage:(UIImage*)image atIndexPath:(NSIndexPath*)indexPath;// 应避免泛型弱、语义含糊、无关参数如把 delegate 塞进纯数据函数-(id)exifData:(UIImage*)image position:(id)indexPath callback:(idErrorDelegate)delegate;Kotlin/Swift 侧同理少用 Any、少用“万能回调”用 Result、密封类错误、sealed interface 等表达状态。4.3 思路统一同一种问题列表分页、登录态失效、图片加载应用同一套基础设施避免“这个页面用 A 库、那个页面手写一套”。4.4 依赖方向减少横向与跨层模块间尽量不横向互相穿透依赖尽量单向。跨层访问例如网络层细节直接驱动具体 Widget应极少出现必要时应通过明确的事件总线或领域层收口并限制使用场景。4.5 该收权处收权该放权处放权对一致性、安全、数据完整性要强约束例如统一写库入口、统一鉴权刷新。对产品实验、UI 细节、小范围策略可保留扩展点策略注入、插件接口等。4.6 可测试、可扩展核心业务与 UI 解耦便于单测与 UI 测试网络与存储可替换为 Fake。模块边界清晰时**加新功能像“插模块”**而不是“改全局”。4.7 适度超前技术超前关注平台演进如 SwiftUI/Compose、并发模型。产品超前与产品沟通中长期形态在路由、配置、多租户等方面预留空间——不等于提前实现。4.8 接口少、参数少在满足充要条件前提下收敛入口多出来的往往是历史包袱或设计犹豫。4.9 性能重要但在客户端常“排在务实优先级之后”移动端设备性能总体较好很多微优化用户无感更应关注首屏、卡顿、耗电、包体积、后台行为等可感知指标。性能优化应分域网络、渲染、存储、图片并有数据。5. 四大技术域架构落在哪里5.1 网络层统一Base URL、拦截器日志、鉴权、重试策略、错误模型、解析与版本协商。体验请求合并、缓存策略、离线队列若需要、弱网 UI 反馈。安全证书校验、敏感信息不落日志、混淆与反调试按合规要求。5.2 界面与导航导航作为一等公民深链接、登录拦截、栈管理、多 Tab 与模块化路由要有一致规则。状态管理无论 MVVM 还是 MVI关键是单向可追溯与可测试避免“双向绑定到处飞”导致状态来源不清。5.3 本地持久化明确缓存可丢 vs 源数据不可随意丢 vs 配置。读写路径尽量经 Repository迁移策略与版本号要有规范。5.4 动态化与发布节奏配置驱动、远程开关、资源下发注意审核政策与隐私。热修复在不同平台与商店政策下差异极大应作为风险与合规决策而不是纯技术炫技。六、平台视角iOS 与 Android 的共性差异点iOSAndroidUI 声明式趋势SwiftUIJetpack Compose并发Swift 并发 / GCDKotlin 协程模块化SPM / XCFramework / 私有 PodGradle 模块 / AAR系统约束后台、推送、隐私弹窗更“严格且统一”厂商差异、后台限制碎片化架构思想可以共用边界、依赖方向、测试策略实现选用各自生态内成熟组件即可。七、几条补充模块化与构建速度细粒度模块 明确依赖有助于并行开发与增量编译这与“不要巨型 Common”同一逻辑。大仓 / 多仓取舍在协作成本与工具链关键是接口契约与版本策略清晰。跨端复用Kotlin Multiplatform、共享网络模型等可降低成本但要警惕为了复用而扭曲边界——共享层应稳定、薄而不是把整个 App 逻辑塞进 shared。可观测性崩溃、性能、关键业务漏斗应纳入架构基座否则“架构”只剩目录结构。八、结语移动端架构的本质不是选一个时髦缩写MVI、Clean 等而是在快速迭代的产品节奏下用清晰的模块与一致的规范降低协作与演进成本。

更多文章