客户端架构设计和应用|青训营笔记

124 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第11天

本节课的主要内容:客户端架构设计和应用

1,架构面临的问题

1.1 产品和架构的生命周期

3A9DC725413FFC1CA8520F964BD459D0.jpg

1.2 不同技术领域的架构问题

ECC3081DD5F7EA615FE9FCE8F0573CEE.jpg

交叉问题
跨端调用:JsBridge/JNI...
多端一致:统一接口层/统一实现层...
数据通信:IDL协议/压缩/安全...
公共问题
编程思想:OOP/AOP/IoC...
问题分解:按业务/按技术...
领域建模:接口设计/DSL/...
服务治理:模块化/容器化...
流程机制:敏捷开发/单测手段...
架构标准:公约文档/数据监测...

1.3 其他挑战

  • 理解成本变高
  • 预测难度变大
  • 期望高
  • 责任大
  • 事情难
  • 疗效慢

1.4 典型的客户端架构

C025981869D13CDDF2ADB3E8E2F5F113.jpg

应用框架层: 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 大的架构手段

34B8E7AAE06AA3059A380B09BC0EA9A6.jpg

3,架构演进

孕育期-婴儿期-学步期-青春期-壮年期-稳定器-贵族期-官僚期

6136FB69B0E75E306655245ED2D2439D.png

4,成为优秀架构师

定义问题->确定架构->方案落地->结果复盘

5,总结

架构设计是为了解决特定领域不同发展阶段的业务问题,不同领域的架构有明显的技术差异,但也有很多相似性,架构不仅面临技术挑战,还要应对组织业务膨胀的熵增。移动端需要利用有限的设备资源设计符合小屏幕的架构。不同架构手段的共同目标是高内聚低耦合,找到适合业务场景的架构而不是炫技滥用,一个复杂的系统是多种架构模型的组合体。架构随业务发展由简单变得复杂是规律,没必要最初用复杂架构来解决简单问题,需要用规范持续重构来对抗代码的腐朽。架构的问题是盘根错节的,将所有问题放在一起,就有轻重缓急之分,就有类别之分。挑战、问题、手段这些经常混为一谈,哪些是挑战?哪些是问题?那些是手段?勤于编码,有技术追求。