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

108 阅读3分钟

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

01 本堂课重点内容:

  • 了解架构中面临的问题
  • 学习常见的架构手段
  • 通过案例熟悉架构流程

02 详细知识点介绍:

2.1 架构面临的问题

产品与架构的生命周期是有成长期、稳重期与衰退期的。架构面临的问题,也会随着产品阶段的不同而发生变化。架构是不断发展变化的,是针对不同业务问题的权变。因此可能并没有一个完全通用的产品与架构的方案。
只要产品在不断发展,其架构一定是符合熵增定律越来越复杂的。 同时我们还需要面对其他几个问题:

  • 业务变化不可预测: 一个产品的业务总是在不断变化的。
  • 技术变化不可预测: 一个产品所用的技术栈也是不断在变化的。
  • 庞大的项目结构的不易预测性: 随着业务发展其理解成本与预测难度必定会变高。

2.2 典型架构分享

Android OS作为典型的架构,其架构如下图所示: image.png

  • 应用框架层: App开发者直接使用的接口层,UI的实现、数据的处理、资源的使用,都是利用这一层的API
  • Binder IPC: 提供跨进程访问的能力,App可以高效的访问由系统进程暴露的能力。App进程与系统进程之间的通信是 典型的C/S模型。
  • 系统服务: 提供窗口管理、相机、音视频等重要的系统能力,包含各种子系统,内部逻辑十分庞大,往下调用HAL层封装的硬件能力;往上通过Binder暴露可以远程调用的API
  • 硬件抽象层: 屏蔽底层不同驱动的差异,使得系统服务层可以快速适配到不同的硬件设备
  • Linux内核: CPU、内存、唤醒服务等重要的驱动实现都是基于该层操作系统的核心实现。

2.3 常见的架构手段

MVC/MVP/MVVM
MVC,MVP和MVVM都是常见的软件架构设计模式。不同于设计模式只是为了解决一类问题而总结出的抽象方法,一种架构模式往往使用了多种设计模式。具体区别主要如以下阐述

  • MVC由:
    • 视图(View):用户界面。
    • 控制器(Controller):业务逻辑
    • 模型(Model):数据保存

这三部分组成,通信方式如下图所示,用户可以通过 View 接受指令,传递给 Controller,也可以直接传给Controller

image.png

  • MVP 模式将 Controller 改名为 Presenter,同时改变了通信方向。使得View不和Model发生联系。

image.png

  • MVVM 模式将 Presenter 改名为 ViewModel,基本上与 MVP 模式完全一致。其区别主要是采用双向绑定:View的变动自动反映在 ViewModel中。

以上图片来源于MVC,MVP 和 MVVM 的图示 - 阮一峰的网络日志

在架构中我们需要懂得

  • 不同架构手段的共同目标是高内聚低耦合
  • 找到适合业务场景的架构而不是炫技滥用
  • 一个复杂的系统是多种架构模型的组合体

2.4 架构演进的流程

在架构中我们需要注意架构的规律是

  • 架构要随业务发展由简单变到复杂
  • 在最初处理简单问题时无需使用复杂架构
  • 规范的重构可以解决代码的臃肿

image.png

03 课后个人总结:

本节课通过老师的讲解,使我对客户端架构有了一个较为清晰的认识,对架构设计模式等知识有了一个更深入的了解,为后续的软件开发做下了铺垫。

04 参考文献:

  1. 【Android 客户端专场 学习资料三】第四届字节跳动青训营 - 掘金 (juejin.cn)
  2. Android 架构  |  Android 开源项目  |  Android Open Source Project (google.cn)
  3. MVC,MVP 和 MVVM 的图示 - 阮一峰的网络日志