概念
SCADET 框架:移动系统设计
学习 SCADET,一个用于解决和设计任何移动系统设计问题的框架。
...
SCADET框架的分解
...
定义系统需求
- 离线功能是否至关重要?数据如何同步?
- 对电池续航和数据使用量有何影响?
- 是否需要处理不稳定的网络状况(例如隧道、农村地区)?
- 我们需要支持哪些设备碎片化问题(操作系统版本、屏幕尺寸)?
- 离线功能是否至关重要?数据如何同步?
- 对电池续航和数据使用量有何影响?
- 是否需要处理不稳定的网络状况(例如隧道、农村地区)?
- 我们需要支持哪些设备碎片化问题(操作系统版本、屏幕尺寸)?
...
基于需求的设计考量
- 客户端与服务器通信如何针对移动端进行优化(例如,最小化数据负载、请求批处理)?
- 将采用哪种客户端状态管理模式(MVVM、MVI等)?
- 如何在不耗尽电池或过度消耗数据的情况下处理后台任务?
- 客户端与服务器通信如何针对移动端进行优化(例如,最小化数据负载、请求批处理)?
- 将采用哪种客户端状态管理模式(MVVM、MVI等)?
- 如何在不耗尽电池或过度消耗数据的情况下处理后台任务?
...
移动系统架构概览
- 移动应用将如何划分为独立模块(例如,UI、业务逻辑、数据、网络),它们之间的数据流路径如何定义?
- 将采用何种多层客户端架构(例如,展示层、业务层、数据层),ViewModel、用例和仓库等组件如何交互以实现严格的向内依赖并最小化耦合?
- 后端将如何明确支持移动端前端,是否需要引入后端为前端(BFF)层来优化这些交互?
- 移动应用将如何划分为独立模块(例如,UI、业务逻辑、数据、网络),它们之间的数据流路径如何定义?
- 将采用何种多层客户端架构(例如,展示层、业务层、数据层),ViewModel、用例和仓库等组件如何交互以实现严格的向内依赖并最小化耦合?
- 后端将如何明确支持移动端前端,是否需要引入后端为前端(BFF)层来优化这些交互?
...
移动系统内部交互的API概览(后端)
- 针对移动端优化的API如何最小化数据负载和网络调用?(例如,仅发送必要字段、批量更新)。
- 是否利用推送通知?它们如何与API集成?
- 客户端将如何优雅地处理API错误和网络重试?
- 针对移动端优化的API如何最小化数据负载和网络调用?(例如,仅发送必要字段、批量更新)。
- 是否利用推送通知?它们如何与API集成?
- 客户端将如何优雅地处理API错误和网络重试?
...
评估非功能性需求
- 设计如何最小化电池消耗(例如,高效的后台任务、减少唤醒锁)?
- 应用程序如何管理数据消耗?(例如,懒加载、图像压缩、智能同步)。
- API调用对应用性能和响应速度有何影响?
- 设计如何最小化电池消耗(例如,高效的后台任务、减少唤醒锁)?
- 应用程序如何管理数据消耗?(例如,懒加载、图像压缩、智能同步)。
- API调用对应用性能和响应速度有何影响?
...
在高效权衡中平衡NFRs
- 平台特定 vs. 跨平台: 在性能/平台特定功能(平台特定)与开发成本/速度(React Native、Flutter)之间的权衡。
- 离线数据 vs. 数据新鲜度: 允许用户离线工作(可能使用过时数据)与要求持续连接以确保绝对实时准确性的权衡。
- 应用大小 vs. 功能: 哪些功能可能被推迟或动态交付,以保持初始应用下载体积较小?
- 平台特定 vs. 跨平台: 在性能/平台特定功能(平台特定)与开发成本/速度(React Native、Flutter)之间的权衡。
- 离线数据 vs. 数据新鲜度: 允许用户离线工作(可能使用过时数据)与要求持续连接以确保绝对实时准确性的权衡。
- 应用大小 vs. 功能: 哪些功能可能被推迟或动态交付,以保持初始应用下载体积较小?