这是我参与「第四届青训营 」笔记创作活动的第11天
本节课的主要内容:客户端架构设计和应用
1,架构面临的问题
1.1 产品和架构的生命周期
1.2 不同技术领域的架构问题
交叉问题
跨端调用:JsBridge/JNI...
多端一致:统一接口层/统一实现层...
数据通信:IDL协议/压缩/安全...
公共问题
编程思想:OOP/AOP/IoC...
问题分解:按业务/按技术...
领域建模:接口设计/DSL/...
服务治理:模块化/容器化...
流程机制:敏捷开发/单测手段...
架构标准:公约文档/数据监测...
1.3 其他挑战
- 理解成本变高
- 预测难度变大
- 期望高
- 责任大
- 事情难
- 疗效慢
1.4 典型的客户端架构
应用框架层: APP开发者直接使用的接口层,UI的实现、数据的处理、资源的使用,都是利用这一层的API
系统服务: 提供窗口管理、相机、音视频等重要的系统能力,包含各种子系统,内部逻辑十分庞大,往下调用HAL层封装的硬件能力;往上通过Binder暴露可以远程调用的API
Linux内核: CPU、内存、唤醒服务等重要的驱动实现都是基于该层操作系统的核心实现
Binder IPC: 提供跨进程访问的能力,APP可以高效的访问由系统远程暴露的能力。APP进程与系统进程之间的通信是典型的C/S模型。
硬件抽象层: 屏蔽底层不同驱动的差异,使得系统服务层可以快速适配到不同的硬件设备
1.5 典型的客户端架构-Flutter
UI框架层: 提供不同样式的组件和动画,声明试UI。采用了Dart作为编程语言,能够同时支持JIT和AOT,在开发调试和运行阶段都能有不错的效率提升。
嵌入层: Flutter引擎需嵌入不同的平台:Android/ios/linux等
引擎层: 将上层定义的UI树转换成屏幕像素,提供平台调用接口和Dart虚拟机
2,常见的架构手段
2.1 小的架构手段
- MVC
- MVP
- MVVM
- AOP
- IoC
2.2 大的架构手段
3,架构演进
孕育期-婴儿期-学步期-青春期-壮年期-稳定器-贵族期-官僚期
4,成为优秀架构师
定义问题->确定架构->方案落地->结果复盘
5,总结
架构设计是为了解决特定领域不同发展阶段的业务问题,不同领域的架构有明显的技术差异,但也有很多相似性,架构不仅面临技术挑战,还要应对组织业务膨胀的熵增。移动端需要利用有限的设备资源设计符合小屏幕的架构。不同架构手段的共同目标是高内聚低耦合,找到适合业务场景的架构而不是炫技滥用,一个复杂的系统是多种架构模型的组合体。架构随业务发展由简单变得复杂是规律,没必要最初用复杂架构来解决简单问题,需要用规范持续重构来对抗代码的腐朽。架构的问题是盘根错节的,将所有问题放在一起,就有轻重缓急之分,就有类别之分。挑战、问题、手段这些经常混为一谈,哪些是挑战?哪些是问题?那些是手段?勤于编码,有技术追求。