内容简介
所有程序员都有成为架构师的潜力,只要掌握了架构师的思维方式和工作方法,你也能成长为架构师。
鸿蒙操作系统是华为自研的、面向万物互联的全场景分布式操作系统,支持手机、平板、PC 智能穿戴、智
慧屏等多种终端设备运行,是提供应用开发、设备开发的一站式服务的平台。随着 HarmonyOS NEXT 正式
发布,市面上对于鸿蒙架构设计方面的需求呈井喷之势。
本书以最新的 HarmonyOS NEXT 版本为基石,详细介绍成为鸿蒙架构师应具备和掌握的核心能力和工
作方法,包括架构设计思维、架构设计原理、架构设计模式、工具、编程语言、UI 设计、线程模型设计、通
信设计、持久化设计、安全性、测试、调优调测等多个主题。
本书不但通过真实案例讲解架构设计流程和经验,还总结了丰富的鸿蒙架构师工作原则和技巧,尤其
适合广大鸿蒙程序员进阶学习。同时,学习本书也有助于产品经理、测试人员、运维人员和其他行业从业者
理解鸿蒙软件架构设计工作。
目录
contents
目录
成为鸿蒙架构师
1.1 什么是鸿蒙 2
1.1.1 万物互联时代的新挑战 2
1.1.2 什么是HarmonyOS 3
1.1.3 鸿蒙生态详解 4
1.2 鸿蒙开发的两大方向 4
1.2.1 设备开发 4
1.2.2 应用开发 5
1.3 鸿蒙架构师要做什么 5
1.3.1 技术研究与规划 6
1.3.2 系统架构设计 6
1.3.3 开发与指导 6
1.3.4 项目管理与协调 6
1.3.5 系统维护与升级 7
1.4 如何成为团队的架构师 7
1.4.1 扎实的知识储备 7
1.4.2 丰富的提升技能 8
1.4.3 经验的积累 8
1.4.4 职业素养的培养 8
架构设计思维
2.1 架构师设计思维特点 11
2.1.1 系统性 11
2.1.2 抽象性 11
2.1.3 前瞻性 12
2.1.4 权衡性 12
2.1.5 逆向性 12
2.1.6 协作性 13
2.2 核心思维方式 13
2.2.1 问题定义思维 13
2.2.2 数据驱动思维 13
2.2.3 复用思维 14
2.2.4 创新思维 14
2.2.5 风险管理思维 15
2.3 关键要素 15
2.3.1 抽象与建模 15
2.3.2 整体与局部 16
2.3.3 技术与业务 16
2.3.4 稳定性与可扩展性 16
2.3.5 性能与成本 17
2.3.6 迭代与演进 17
2.4 实践应用 17
2.4.1 分层架构设计 17
2.4.2 微服务架构 18
2.4.3 缓存机制 18
2.4.4 数据处理与分析 19
2.4.5 高可用与容错设计 19
架构设计原理
3.1 什么是软件架构 21
3.1.1 软件架构是数字世界的基石 21
3.1.2 软件架构的重要性 21
3.2 B/S与C/S架构 22
3.2.1 B/S架构 22
3.2.2 C/S架构 23
3.2.3 富客户端技术 24
3.3 面向对象的分布式架构 25
3.3.1 基本概念 25
3.3.2 基本原理 26
3.3.3 关键特点 27
3.3.4 架构组成 28
3.3.5 应用场景 28
3.4 面向服务的分布式架构 28
3.4.1 核心概念 29
3.4.2 关键特性 29
3.4.3 架构构成 29
3.4.4 通信与交互 30
3.4.5 应用场景 31
3.4.6 Web服务的分类 31
3.5 面向消息的分布式架构 33
3.5.1 核心概念 33
3.5.2 关键特性 33
3.5.3 架构构成 34
3.5.4 通信与交互 35
3.5.5 应用场景 35
3.6 REST风格的架构 36
3.6.1 什么是REST 36
3.6.2 REST设计原则 37
3.6.3 成熟度模型 38
3.7 微服务架构 39
3.7.1 什么是微服务架构 39
3.7.2 微服务架构与SOA架构的
区别 40
3.7.3 何时采用微服务架构 44
3.8 Serverless架构 44
3.8.1 什么是Serverless架构 45
3.8.2 Serverless典型的应用
场景 46
3.8.3 Serverless架构原则 48
3.9 Cloud Native架构 48
3.9.1 为什么需要使用Cloud
Native 48
3.9.2 Cloud Native与微服务架构的关系 49
3.9.3 Cloud Native与Serverless
架构的关系 49
3.9.4 Cloud Native优点 49
3.9.5 Cloud Native不是银弹 51
3.9.6 面临的挑战 51
架构设计模式
4.1 什么是架构设计模式 53
4.1.1 架构设计模式的定义 53
4.1.2 架构设计模式的重要性 53
4.1.3 架构设计模式的选择与
应用 54
4.2 分层模式 54
4.2.1 分层模式的基本概念 55
4.2.2 分层模式的优势 55
4.2.3 分层模式的应用场景 56
4.2.4 分层模式的实现要点 56
4.2.5 分层模式的局限性与
挑战 57
4.3 端口适配器模式 57
4.3.1 端口适配器模式的基本
概念 58
4.3.2 端口适配器模式的优势 59
4.3.3 端口适配器模式的应用
场景 59
4.3.4 端口适配器模式的实现
要点 60
4.3.5 端口适配器模式的局限性与
挑战 60
4.4 管道过滤器模式 60
4.4.1 管道过滤器模式的基本
概念 61
4.4.2 管道过滤器模式的优势 61
4.4.3 管道过滤器模式的应用
场景 62
4.4.4 管道过滤器模式的实现
要点 62
4.4.5 管道过滤器模式的局限性与
挑战 63
4.5 主从模式 63
4.5.1 主从模式的基本概念 63
4.5.2 主从模式的优势 64
4.5.3 主从模式的应用场景 65
4.5.4 主从模式的实现要点 65
4.5.5 主从模式的局限性与挑战 66
4.6 发布订阅模式 66
4.6.1 发布订阅模式的定义与基本
概念 66
4.6.2 发布订阅模式的优势 67
4.6.3 发布订阅模式的应用场景 68
4.6.4 发布订阅模式的实现要点 68
4.6.5 发布订阅模式的局限性与
挑战 69
4.7 共享数据模式 69
4.7.1 共享数据模式的基本概念 69
4.7.2 共享数据模式的优势 70
4.7.3 共享数据模式的应用场景 70
4.7.4 共享数据模式的实现要点 71
4.7.5 共享数据模式的局限性与
挑战 71
4.8 能力中心模式 72
4.8.1 能力中心模式的基本概念 72
4.8.2 能力中心模式的优势 73
4.8.3 能力中心模式的应用场景 74
4.8.4 能力中心模式的实现要点 74
4.8.5 能力中心模式的局限性与
挑战 75
4.9 开源贡献模式 75
4.9.1 开源贡献模式的核心概念 76
4.9.2 开源贡献模式的优势 76
4.9.3 开源贡献模式的主要类型 77
4.9.4 开源贡献模式的实践流程 77
4.9.5 开源贡献模式面临的挑战与
解决方案 78
4.10 鸿蒙架构模式 78
4.10.1 鸿蒙架构模式的核心概念 79
4.10.2 鸿蒙架构模式的优势 80
4.10.3 鸿蒙架构模式的应用场景 80
4.10.4 鸿蒙架构模式的技术实现
要点 81
4.10.5 鸿蒙架构模式面临的挑战与应对策略 81
4.11 鸿蒙应用开发架构选型 82
4.11.1 鸿蒙应用开发架构概述 82
4.11.2 常见架构模式详细分析 83
4.11.3 架构选型考虑因素 84
4.11.4 架构选型案例分析 84
工具
5.1 理解问题的常用方法 87
5.1.1 观察法 87
5.1.2 访谈法 87
5.1.3 文档分析法 88
5.1.4 思维导图法 88
5.1.5 鱼骨图法 88
5.1.6 标杆分析法 89
5.1.7 模拟与实验法 89
5.1.8 总结 90
5.2 探索解决方案的常用方法 90
5.2.1 头脑风暴法 90
5.2.2 逆向思维法 91
5.2.3 类比法 91
5.2.4 分治法 91
5.2.5 文献研究法 92
5.2.6 专家咨询法 92
5.2.7 原型法 93
5.2.8 总结 93
5.3 展示设计的常用方法 93
5.3.1 可视化图表法 94
5.3.2 故事板法 95
5.3.3 对比分析法 95
5.3.4 案例分析法 96
5.3.5 交互式展示法 96
5.3.6 文档说明法 96
5.3.7 总结 97
5.4 评估设计方案的常用方法 97
5.4.1 功能完整性评估法 97
5.4.2 性能评估法 98
5.4.3 可维护性评估法 98
5.4.4 可扩展性评估法 99
5.4.5 安全性评估法 99
5.4.6 成本效益评估法 99
5.4.7 风险评估法 100
5.4.8 总结 100
5.5 DevEco Studio工具简介 101
5.5.1 DevEco Studio特点 101
5.5.2 应用/元服务开发流程 101
5.5.3 下载、安装DevEco
Studio 102
5.5.4 启动DevEco Studio 104
5.5.5 创建虚拟机 105
5.6 Command Line Tools工具简介 109
5.6.1 命令行工具获取 109
5.6.2 配置环境变量 110
5.6.3 代码检查codelinter 110
5.6.4 三方库的包管理ohpm 111
5.6.5 命令行解析hstack 112
5.6.6 编译构建hvigorw 113
5.7 ohpm-repo工具简介 113
5.7.1 安装ohpm-repo工具 113
5.7.2 启动ohpm-repo 114
5.8 仓颉插件 115
5.8.1 DevEco Studio Cangjie Plugin概述 115
5.8.2 设置安装目录 115
5.8.3 安装本地插件 116
5.8.4 验证 119
5.9 代码管理工具Git介绍 119
5.9.1 Git的诞生与发展 119
5.9.2 Git的核心概念 119
5.9.3 Git的基本操作 121
5.9.4 Git在团队协作中的优势......122
5.9.5 Git的进阶应用 122
5.10 敏捷开发方法论 123
5.10.1 敏捷开发方法论的诞生与
发展 123
5.10.2 敏捷开发的核心原则 124
5.10.3 常见的敏捷开发框架 124
5.10.4 敏捷开发在团队中的实施
要点 126
5.10.5 敏捷开发的优势与
挑战 126
编程语言
6.1 常用鸿蒙编程语言 129
6.1.1 鸿蒙编程语言发展史 129
6.1.2 鸿蒙编程语言的选择 129
6.2 初识ArkTS 130
6.2.1 ArkTS与JS/TS的
关系 130
6.2.2 ArkTS与TS的差异 131
6.2.3 ArkTS对于UI的支持 132
6.2.4 ArkTS特性 132
6.3 实战:编写第一个ArkTS应用 133
6.3.1 选择创建新项目 134
6.3.2 选择模板 134
6.3.3 配置项目的信息 135
6.3.4 自动生成工程代码 136
6.3.5 预览项目 137
6.3.6 运行项目 137
6.4 初识仓颉 138
6.4.1 仓颉特性 139
6.4.2 高效编程 140
6.4.3 安全可靠 141
6.4.4 轻松并发 141
6.4.5 卓越性能 142
6.5 实战:编写第一个仓颉应用 143
6.5.1 选择创建新项目 143
6.5.2 选择模板 144
6.5.3 配置项目的信息 144
6.5.4 自动生成工程代码 145
6.5.5 使用本地模拟器运行
应用 146
6.6 方舟编译器原理 147
6.6.1 OpenArkCompiler版本 147
6.6.2 编译工具链 148
6.6.3 运行时 148
6.6.4 运行时设计特点 149
UI设计
7.1 鸿蒙UI设计理念 152
7.1.1 One万物归一回归本源 152
7.1.2 Harmonious一生为二平衡
共生 152
7.1.3 Universe三生万物演化
自如 152
7.2 声明式UI开发框架 153
7.2.1 ArkUI基本概念 153
7.2.2 ArkUI主要特征 154
7.2.3 基于ArkTS的声明式开发
范式 155
7.3 视觉风格 156
7.3.1 色彩 156
7.3.2 字体排印 157
7.3.3 应用图标 158
7.3.4 系统图标 159
7.3.5 实战:使用系统图标 159
7.4 布局 165
7.4.1 窗口状态 166
7.4.2 像素单位 166
7.4.3 断点 167
7.4.4 栅格系统 168
7.4.5 响应式布局 169
7.5 实战:ArkUI容器组件开发 171
7.5.1 Column和Row 171
7.5.2 ColumnSplit和RowSplit 172
7.5.3 Flex 174
7.5.4 Grid和GridItem 175
7.5.5 GridRow和GridCol 176
7.5.6 List、ListItem和ListItemGroup 177
7.5.7 Navigator 178
7.5.8 RelativeContainer 182
7.5.9 Stack 183
7.5.10 Swiper 184
7.5.11 Tabs和TabContent 185
7.6 实战:使用ArkUI实现“计算器” 186
7.6.1 新增Calculator.ets的
文件 186
7.6.2 实现递归运算 186
7.6.3 实现输入字符串转为字符串
数组 188
7.6.4 新增CalculatorButtonInfo.ets的文件 188
7.6.5 实现CalculatorButton
组件 189
7.6.6 构造整体页面 190
7.6.7 运行 191
7.7 控件 192
7.8 实战:ArkUI基础组件开发 193
7.8.1 Button 193
7.8.2 Checkbox 194
7.8.3 CheckboxGroup 195
7.8.4 Image 196
7.8.5 LoadingProgress 198
7.8.6 Progress 198
7.8.7 Radio 199
7.8.8 RichText 200
7.8.9 ScrollBar 201
7.8.10 Select 202
7.8.11 Slider 203
7.8.12 Text 204
7.8.13 TextArea 206
7.8.14 TextInput 207
7.9 多设备响应式设计 208
7.9.1 背景 208
7.9.2 定义及目标 209
7.9.3 基础知识 210
7.10 实战:开发一多图片查看器 211
7.10.1 UX设计 212
7.10.2 架构设计 213
7.10.3 pictureView模块实现 217
7.10.4 base模块实现 227
7.10.5 default模块实现 229
线程模型设计
8.1 Stage模型开发概述 232
8.1.1 Stage模型的设计思想 232
8.1.2 Stage模型的基本概念 232
8.2 Stage模型应用组件 234
8.2.1 应用/组件级配置 234
8.2.2 UIAbility组件 234
8.2.3 ExtensionAbility组件 239
8.2.4 AbilityStage组件容器 239
8.2.5 应用上下文Context 241
8.2.6 组件启动规则 242
8.3 应用间跳转 243
8.3.1 应用场景 243
8.3.2 应用跳转的两种类型 244
8.4 实战:通过应用链接拉起指定应用 244
8.4.1 应用链接 244
8.4.2 应用链接分类 244
8.4.3 拉起指定应用 245
8.5 进程模型 248
8.6 线程模型 249
8.6.1 主线程 250
8.6.2 TaskPool Worker线程 250
8.6.3 Worker线程 250
8.6.4 TaskPool和Worker的
对比 251
8.6.5 实战:使用EventHub进行线程内通信 252
8.7 并发概述 254
8.8 异步并发 255
8.8.1 Promise 255
8.8.2 async/await 256
8.8.3 实战:异步并发的例子 257
8.9 多线程并发 258
8.9.1 内存共享模型 258
8.9.2 Actor模型 259
8.9.3 实战:使用TaskPool 259
8.9.4 实战:使用Worker 261
通信设计
9.1 本地过程调用 266
9.1.1 本地过程调用的概念 266
9.1.2 本地过程调用的实现 266
9.2 远程过程调用 268
9.2.1 远程过程调用原理 268
9.2.2 如何实现远程过程调用 270
9.2.3 远程过程调用API 273
9.2.4 远程过程调用发展历程 273
9.3 常用网络I/O模型 274
9.3.1 阻塞I/O模型 274
9.3.2 非阻塞I/O模型 275
9.3.3 I/O复用模型 276
9.3.4 信号驱动I/O(SIGIO)
模型 277
9.3.5 异步I/O模型 277
9.3.6 几种I/O模型的比较 278
9.4 I/O操作中的常用术语 279
9.4.1 阻塞和非阻塞 279
9.4.2 同步与异步 279
9.4.3 总结 280
9.5 事件驱动 280
9.5.1 事件驱动编程 280
9.5.2 事件循环(Event Loop)的
实现 281
9.5.3 Reactor模型 281
9.5.4 Proactor模型 283
9.6 公共事件概述 284
9.6.1 公共事件的分类 285
9.6.2 公共事件的开发 286
9.7 实战:订阅、发布、取消公共事件 287
9.7.1 添加按钮 287
9.7.2 添加Text显示接收的
事件 288
9.7.3 设置按钮的点击事件
方法 288
9.7.4 运行 290
9.8 并发线程间通信 291
9.8.1 实战:TaskPool任务与宿主线程通信 291
9.8.2 Worker和宿主线程的即时消息通信 293
9.9 Emitter概述 294
9.9.1 订阅 295
9.9.2 取消订阅 295
9.9.3 发送事件 295
9.10 实战:使用Emitter进行线程间通信 296
9.10.1 添加按钮 296
9.10.2 添加Text显示接收的
事件 297
9.10.3 设置按钮的点击事件
方法 297
9.10.4 运行 298
9.11 HTTP数据请求概述 299
9.11.1 HTTP请求方法 299
9.11.2 HTTP状态码 299
9.12 实战:通过HTTP请求数据 300
9.12.1 准备一个HTTP服务
接口 300
9.12.2 添加使用Button组件来触发点击 300
9.12.3 发起HTTP请求 301
9.12.4 增加权限 302
9.12.5 运行 302
9.13 Web组件概述 303
9.13.1 加载本地网页 303
9.13.2 加载在线网页 304
9.13.3 隐私模式加载在线网页 304
9.13.4 网页缩放 305
9.13.5 文本缩放 305
9.13.6 Web组件事件 306
9.13.7 Web和JavaScript
交互 306
9.13.8 处理页面导航 310
9.14 实战:Web组件加载在线网页 311
9.14.1 准备一个在线网页地址 311
9.14.2 声明网络访问权限 311
9.14.3 发起HTTP请求 312
9.14.4 运行 312
持久化设计
10.1 分布式数据服务概述 315
10.1.1 分布式数据服务基本
概念 315
10.1.2 分布式数据服务运作
机制 317
10.1.3 分布式数据服务约束与
限制 318
10.2 分布式数据服务开发步骤 319
10.2.1 导入模块 319
10.2.2 构造分布式数据库管理类
实例 319
10.2.3 获取/创建分布式
数据库 320
10.2.4 订阅分布式数据库数据
变化 320
10.2.5 将数据写入分布式
数据库 321
10.2.6 查询分布式数据库
数据 321
10.3 关系型数据库概述 322
10.3.1 基本概念 322
10.3.2 运作机制 323
10.3.3 默认配置与限制 323
10.4 实战:关系型数据库开发 324
10.4.1 操作RdbStore 324
10.4.2 账目信息的表示 327
10.4.3 操作账目信息表 328
10.4.4 设计界面 330
10.4.5 运行 332
10.5 用户首选项概述 333
10.5.1 用户首选项运作机制 333
10.5.2 约束与限制 334
10.6 实战:用户首选项开发 334
10.6.1 操作Preferences 335
10.6.2 账目信息的表示 337
10.6.3 设计界面 337
10.6.4 运行 339
安全性
11.1 基本概念 342
11.1.1 安全威胁、策略和
机制 342
11.1.2 密码与数字签名 343
11.2 加密算法 344
11.2.1 对称加密 344
11.2.2 使用对称密钥加密的数字
签名 345
11.2.3 非对称加密 345
11.2.4 使用公钥加密的数字
签名 346
11.3 安全通道 347
11.3.1 SSL/TLS 347
11.3.2 SSL握手过程 347
11.3.3 HTTPS 351
11.4 访问控制概述 351
11.4.1 防火墙 351
11.4.2 堡垒机 352
11.4.3 拒绝服务 352
11.4.4 访问控制的模型 353
11.5 HarmonyOS的访问控制 354
11.5.1 权限包含的基本概念 354
11.5.2 权限等级说明 356
11.5.3 权限类型 356
11.5.4 访问控制开发步骤 356
11.6 实战:访问控制授权 358
11.6.1 场景介绍 359
11.6.2 声明访问的权限 359
11.6.3 申请授权user_grant
权限 360
11.6.4 运行 361
测试
12.1 应用测试概述 364
12.2 单元测试 364
12.2.1 单元测试框架功能特性 364
12.2.2 基础流程 365
12.2.3 断言库 366
12.2.4 自定义断言 369
12.3 UI测试 371
12.3.1 UI测试框架功能特性 371
12.3.2 Driver使用说明 372
12.3.3 On使用说明 373
12.3.4 Component使用说明 374
12.3.5 UiWindow使用说明 375
12.4 实战:UI测试 376
12.4.1 编写UI测试脚本 376
12.4.2 运行UI测试脚本 378
调优调测
13.1 Performance Analysis Kit简介 381
13.1.1 使用场景 381
13.1.2 能力范围 381
13.1.3 特性 381
13.1.4 故障分析 382
13.2 HiLog使用指导 382
13.2.1 接口说明 382
13.2.2 实战:HiLog开发示例 383
13.3 HiAppEvent使用指导 385
13.3.1 接口说明 385
13.3.2 实战:HiAppEvent使用
示例 386
13.4 HiTraceMeter使用指导 388
13.4.1 基本概念 388
13.4.2 接口说明 389
13.4.3 实战:HiTraceMeter使用
示例 389
13.5 HiTraceChain使用指导 392
13.5.1 基本概念 392
13.5.2 实战:HiTraceChain使用
示例 392
模拟器与真机的差异
参考文献



















