大型iOS应用开发:应用架构与设计模式

大型iOS应用开发:应用架构与设计模式
作 者: 埃里克·文纳洛
出版社: 机械工业出版社
丛编项:
版权说明: 本书为公共版权或经版权方授权,请支持正版图书
标 签: 暂缺
ISBN 出版时间 包装 开本 页数 字数
未知 暂无 暂无 未知 0 暂无

作者简介

  埃里克·文纳洛(Eric Vennaro)Meta的一位团队负责人,他在交付高影响力、技术复杂的项目方面具有丰富的经验,擅长移动端、网页端和后端基础设施等领域。他还对机器学习和隐私问题感兴趣,尤其关注通过机器学习支持的工具来提升隐私保护效果的交叉学科。在负责iOS平台的工作并招聘iOS工程师时,埃里克注意到市面上缺少介绍大型移动应用开发的应用架构与设计模式的资料,因此决定将自己领导移动项目的经验总结出来,撰写了这本书。

内容简介

本书概述了移动工程师面临的扩展挑战,以及处理这些问题的一些标准技术和设计模式。从学习 iOS 平台的基础知识开始,这些基础知识在使用开箱即用的 iOS 解决方案时经常被忽视。掌握了基础知识后,接下来将重点学习架构和设计原则,以便在大型代码库中构建、维护和发布功能,并掌握在大型组织中实施变革的软技能。读者将对 iOS 设计模式有更深入的了解,并掌握将功能从想法转化为产品所需的行业知识。本书还将介绍在大型组织中完成工作所需的人际交往技能——这是个人职业发展的关键一步。

图书目录

目  录

译者序

前 言

第一部分 Apple 系统基础知识

第1章 熟悉Swift 2

1.1 本章概要 2

1.2 结构体与类 2

1.2.1 探索引用类型与值类型 4

1.2.2 类的继承 7

1.2.3 协议 8

1.3 泛型实践 10

1.3.1 泛型函数 11

1.3.2 泛型类型 11

1.4 总结 14

1.4.1 本章要点 14

1.4.2 扩展阅读 14

第2章 内存管理 15

2.1 本章概要 15

2.2 Swift程序内存使用情况 15

2.2.1 栈 16

2.2.2 堆 17

2.2.3 缓冲区上溢与下溢 18

2.3 Swift内存模型 18

2.3.1 Swift栈分配 18

2.3.2 Swift堆分配 19

2.4 自动引用计数 20

2.4.1 引用计数实践 21

2.4.2 ARC观察生命周期的bug 25

2.5 方法派发 25

2.5.1 静态派发 26

2.5.2 动态派发 26

2.5.3 支持值类型的多态性 27

2.5.4 应用内存管理 31

2.6 总结 32

2.6.1 本章要点 32

2.6.2 扩展阅读 32

第3章 iOS持久化选项 33

3.1 概述 33

3.2 iOS持久化选项介绍 34

3.2.1 保存到文件 34

3.2.2 NSUserDefaults 35

3.2.3 钥匙串 37

3.2.4 Core Data 38

3.2.5 深入探索SQLite 41

3.3 案例:缓存Photo Stream 48

3.3.1 高效地获取图片 56

3.3.2 在应用程序启动过程中持久化

缓存图片 56

3.3.3 封装缓存解决方案 56

3.3.4 小结 57

3.4 总结 57

3.4.1 本章要点 58

3.4.2 扩展阅读 58

第4章 并发编程 59

4.1 概述 59

4.2 并发、并行还是异步 60

4.2.1 并发 60

4.2.2 多线程 60

4.2.3 并行 60

4.2.4 异步编程 61

4.2.5 这将通往何方 61

4.3 并发成本 62

4.3.1 线程成本 62

4.3.2 管理状态共享 63

4.3.3 难以调试 63

4.4 实现并发 63

4.4.1 线程和锁 63

4.4.2 使用GCD和调度队列 66

4.4.3 Operation队列 70

4.4.4 Swift并发 70

4.4.5 深入探讨:实现并发的挑战 76

4.5 现实应用程序中的考量 79

4.5.1 案例1:扩展Meta的

NewsFeed 79

4.5.2 案例2:构建Swift并发 81

4.6 总结 81

4.6.1 本章要点 82

4.6.2 扩展阅读 82

第二部分 应用程序架构和设计模式

第5章 优质架构的重要性 84

5.1 概述 84

5.2 定义优质架构 85

5.3 模块化 87

5.3.1 模块化案例研究 88

5.3.2 模块化总结 90

5.4 可测试性 90

5.4.1 测试案例研究 90

5.4.2 可测试性总结 92

5.5 选择一个架构 92

5.6 总结 92

5.6.1 本章要点 93

5.6.2 扩展阅读 93

第6章 常见的设计模式 94

6.1 概述 94

6.2 为什么设计模式是程序设计的基石 95

6.3 设计模式 95

6.3.1 总体主题 95

6.3.2 代理模式 96

6.3.3 外观模式(结构型) 99

6.3.4 建造者模式 101

6.3.5 工厂模式 106

6.3.6 单例模式 110

6.3.7 依赖注入 112

6.3.8 协调器模式 115

6.3.9 观察者模式 121

6.4 总结 126

6.4.1 本章要点 126

6.4.2 扩展阅读 126

第7章 MVC架构 127

7.1 概述 127

7.2 深入探讨MVC 127

7.2.1 MVC组件 128

7.2.2 组件间的交互 129

7.2.3 MVC 示例 130

7.2.4 讨论 138

7.3 总结 146

7.3.1 本章要点 146

7.3.2 扩展阅读 146

第8章 MVVM 147

8.1 概述 147

8.2 深入探讨MVVM 147

8.2.1 MVVM组件 149

8.2.2 组件间的交互 150

8.2.3 MVVM示例 151

8.2.4 讨论 156

8.3 总结 158

8.3.1 本章要点 159

8.3.2 扩展阅读 159

第9章 VIPER 160

9.1 概述 160

9.2 深入探讨VIPER 161

9.2.1 VIPER组件 161

9.2.2 组件间的交互 162

9.2.3 VIPER示例 163

9.2.4 讨论 174

9.3 总结 175

9.3.1 本章要点 176

9.3.2 扩展阅读 176

第10章 响应式编程范式 177

10.1 概述 177

10.2 响应式编程 177

10.2.1 游戏规则 178

10.2.2 数据传播技术 180

10.2.3 与可变状态的交互  182

10.3 函数响应式编程 183

10.3.1 范畴论 184

10.3.2 函子 185

10.3.3 幺半群 185

10.3.4 单子 186

10.4 FRP与Combine 187

10.4.1 发布者与订阅者 187

10.4.2 Combine 的行为 188

10.4.3 应用程序架构 188

10.5 响应式编程与函数响应式编程的

益处 191

10.6 总结 192

10.6.1 本章要点 193

10.6.2 扩展阅读 193

第三部分 大型应用程序设计

第11章 系统设计流程 196

11.1 概述 196

11.2 软件开发生命周期 197

11.2.1 SDLC 如何运作 197

11.2.2 SDLC 模型 202

11.3 技术负责人的关键作用 206

11.4 专注技能的视角 207

11.4.1 定位问题 207

11.4.2 解决方案设计 207

11.4.3 沟通 208

11.5 为成功设定目标 213

11.5.1 S:具体的 213

11.5.2 M:可衡量的 213

11.5.3 A:可实现的 213

11.5.4 R:相关的 213

11.5.5 T:有时间限制的 214

11.6 SDLC为何重要 215

11.7 总结 216

11.7.1 本章要点 216

11.7.2 扩展阅读 217

第12章 可测试性 218

12.1 概述 218

12.2 为何需要测试 219

12.3 单元测试 219

12.3.1 编写可测试的代码 225

12.3.2 setter注入 225

12.4 集成测试 226

12.5 契约测试 228

12.6 UI测试 229

12.7 手动测试 229

12.8 大规模测试管理 231

12.8.1 测试用例优先级排序 231

12.8.2 测试套件的分类 232

12.8.3 对手动测试进行优先级

排序 232

12.8.4 随着时间管理测试 232

12.9 如果我没有测试该怎么办 233

12.10 总结 233

12.10.1 本章要点 233

12.10.2 扩展阅读 234

第13章 性能 235

13.1 概述 235

13.2 为什么性能很重要 236

13.3 iOS性能评估时需要考虑的因素 236

13.4 关键概念 236

13.4.1 顶层指标 237

13.4.2 中间指标 238

13.4.3 漏斗日志 238

13.4.4 评估百分位数 239

13.4.5 监控与警报 239

13.5 完整的性能周期 240

13.5.1 了解你的工具 240

13.5.2 应用程序增长 240

13.5.3 调试性能问题 241

13.5.4 应用奥卡姆剃刀原则 242

13.5.5 持续测试与评估 242

13.6 性能指标 243

13.6.1 应用程序大小 243

13.6.2 应用程序启动时间 244

13.6.3 应用程序响应性(卡顿) 246

13.6.4 耗电量 248

13.6.5 应用程序崩溃 248

13.6.6 网络相关指标 249

13.6.7 参与度指标 250

13.7 简要实例 251

13.8 总结 253

13.8.1 本章要点 253

13.8.2 扩展阅读 253

第14章 实验操作 254

14.1 本章概要 254

14.2 为什么实验很重要 255

14.3 理论实验平台 255

14.3.1 实验总体 256

14.3.2 实验工具 257

14.3.3 度量评估平台 259

14.4 科学方法与假设检验 260

14.4.1 将科学方法应用于我们的Photo Stream示例 261

14.4.2 实验设计与实施 262

14.4.3 结果分析 265

14.5 常见陷阱 278

14.5.1 多重比较问题 278

14.5.2 实验污染 278

14.5.3 声称无统计显著性的结果是

中性的 278

14.5.4 进行规模过小的实验

(低功效) 279

14.5.5 p值操纵 279

14.5.6 对后处理变量的过滤 279

14.5.7 稀释 279

14.5.8 不等待结果稳定 279

14.5.9 非代表性测试体验与

人群 280

14.5.10 忽视网络效应 280

14.5.11 Pre-AA 偏差 280

14.6 额外验证步骤 281

14.7 总结 281

14.7.1 本章要点 281

14.7.2 扩展阅读 282

第15章 应用程序发布与维护 283

15.1 本章概要 283

15.2 持续集成与交付管理:构建

过程 284

15.2.1 保持主干稳定 287

15.2.2 管理构建时间 287

15.2.3 持续交付 288

15.2.4 发布基础设施 288

15.3 发布一个大型项目 291

15.3.1 在构建功能时 291

15.3.2 满足发布标准 293

15.3.3 内部测试与灰度发布 293

15.3.4 发布 294

15.4 警报与监控 294

15.4.1 日志记录 294

15.4.2 监控 295

15.4.3 警报 295

15.4.4 日志记录到警报示例 296

15.5 维护 296

15.6 总结 296

15.6.1 本章要点 297

15.6.2 扩展阅读 298

第四部分 在大型项目中的领导力

第16章 领导多个团队 300

16.1 本章概要 301

16.2 工程师原型 301

16.2.1 修复者 301

16.2.2 技术负责人 301

16.2.3 架构师 302

16.2.4 执行助理 302

16.3 高级工程师的要求 302

16.3.1 广度 303

16.3.2 深度 303

16.3.3 范围 303

16.3.4 运用广度、深度和范围 304

16.3.5 连接整个系统 305

16.3.6 以指标为导向的团队

简介 306

16.3.7 平衡每个维度 307

16.4 成为一名全面发展的高级

工程师 308

16.4.1 理解技术概念的简短题

外话 308

16.4.2 为什么需要软技能 308

16.4.3 情境领导模型 308

16.4.4 建立关系 315

16.5 总结 317

16.5.1 本章要点 317

16.5.2 扩展阅读 317

第17章 实际案例 318

17.1 自上而下与自下而上 318

17.2 案例研究中角色与原型的

说明 328

17.2.1 原型 328

17.2.2 总体说明 329

17.3 总结 330

附录 完善的五年规划 331