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

架构设计 634 浏览 277 下载

大型iOS应用开发:应用架构与设计模式
336页 免费
作者: 埃里克·文纳洛(Eric,Vennaro)
出版社: 机械工业出版社
页数: 336页
ISBN: 9787111768098
下载信息

下载类型: 直接下载

销售价格: ¥0.00


书籍详情
用纸 胶版纸
版次 1
出版时间 2025-01-01
页数 336
包装 平装
开本 16开
ISBN 9787111768098
出版社 机械工业出版社
丛书名 程序员书库
品牌 机工出版
商品编号 14376065
包装清单 暂无
内容简介
编辑推荐 在本书中,你将从学习iOS平台的基础知识开始,这些基础知识在使用现成的iOS解决方案时经常被忽视。虽然标准的iOS解决方案可能在小型项目上有效,但最著名的科技公司一般会对这些解决方案进行再创造,以实现高度定制化的使用,因此了解底层概念至关重要。了解这些概念可以缩短上手时间,让工程师直观地理解“为什么”。 掌握了基础知识后,接下来你将重点学习架构和设计原则,以便在大型代码库中构建、维护和发布功能,并掌握在大型组织中实施变革的软技能。你将对iOS设计模式有更深入的理解,并掌握将功能从创意转化为产品所需的行业知识。你还将学习在大型组织中完成工作所需的人际交往技能——这是个人职业发展的关键一步。 通过阅读本书,你将学会如何: 1、在iOS平台上实践计算机科学和工程基础知识; 2、在大型公司中应用iOS架构并推行最佳实践; 3、确定产品目前存在的不足,并在整个组织内达成一致; 4、利用系统架构知识和行业经验,找出并解决代码库中的问题 内容简介 本书概述了移动工程师面临的扩展挑战,以及处理这些问题的一些标准技术和设计模式。从学习 iOS 平台的基础知识开始,这些基础知识在使用开箱即用的 iOS 解决方案时经常被忽视。掌握了基础知识后,接下来将重点学习架构和设计原则,以便在大型代码库中构建、维护和发布功能,并掌握在大型组织中实施变革的软技能。读者将对 iOS 设计模式有更深入的了解,并...
详细介绍
编辑推荐

在本书中,你将从学习iOS平台的基础知识开始,这些基础知识在使用现成的iOS解决方案时经常被忽视。虽然标准的iOS解决方案可能在小型项目上有效,但最著名的科技公司一般会对这些解决方案进行再创造,以实现高度定制化的使用,因此了解底层概念至关重要。了解这些概念可以缩短上手时间,让工程师直观地理解“为什么”。
掌握了基础知识后,接下来你将重点学习架构和设计原则,以便在大型代码库中构建、维护和发布功能,并掌握在大型组织中实施变革的软技能。你将对iOS设计模式有更深入的理解,并掌握将功能从创意转化为产品所需的行业知识。你还将学习在大型组织中完成工作所需的人际交往技能——这是个人职业发展的关键一步。
通过阅读本书,你将学会如何:

1、在iOS平台上实践计算机科学和工程基础知识;
2、在大型公司中应用iOS架构并推行最佳实践;
3、确定产品目前存在的不足,并在整个组织内达成一致;
4、利用系统架构知识和行业经验,找出并解决代码库中的问题

内容简介

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

作者简介

埃里克·文纳洛(Eric Vennaro)
Meta的一位团队负责人,他在交付高影响力、技术复杂的项目方面具有丰富的经验,擅长移动端、网页端和后端基础设施等领域。他还对机器学习和隐私问题感兴趣,尤其关注通过机器学习支持的工具来提升隐私保护效果的交叉学科。在负责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


前言/序言

前  言
本书将教你如何构建可扩展至数百万用户的移动应用程序,同时帮你成长为专家和首席专家。
本书的结构旨在反映工程师职业生涯的路径,并将职业阶段与每个阶段成功所需的工具对应起来。我们从聚焦Swift语言的工程基础知识开始,然而,大多数基础知识超出了Swift编程语言的范畴。这是有意为之的,因为随着时间的推移,框架和语言会更迭(SwiftUI、Objective-C),但是它们背后的基本概念不会。理解这些基本概念会让你将它们应用于不断变化的环境,并高效地学习新的工具——这在大规模应用中是一项更为重要的技能,因为许多大公司都会编写自定义的实现。理解基础知识是软件工程师职业生涯的第一阶段,也是本书的第一部分。
本书的第二部分将讨论如何利用设计模式和应用架构原则构建更好的应用程序。掌握 iOS 应用架构和基本设计模式对于达到高级工程师水平至关重要。在这个阶段,你很可能已经能够独立管理自己的工作,并能帮助初级工程师快速掌握应用开发的基础知识。这是大多数书籍的终点,但这只是职业生涯的中间点,仅凭技术技能是无法让你超越高级工程师的。
虽然技术深度是最重要且最容易传授的方面,但工程师还需要具备广泛的经验,包括一流的沟通技巧——这也是本书第三部分的重点。在这一部分,我们将探讨软件工程师的几个广度领域,包括沟通、领导力、指导他人和实验的能力。这些技能将帮助你理解哪些项目值得推进以及如何通过与大型团队的协作来实现它们。在这里,你将利用工程基础知识,并将其与在大规模工作中所需的更广泛的技能相结合。
本书的第一部分到第三部分反映了工程师从初级到高级的职业发展路径。你需要具备每部分的技能才能达到下一个层级,但在达到高级工程师后,你的职业生涯将变得更加广阔。你可以进入管理层,或者可以扩大你的知识面,并将其与你在移动应用领域所拥有的深度知识结合起来,以加速个人职业生涯的提升。
这本书是为那些想全面发展的开发者量身定做的,这类开发者通常被称为“T型”开发者,如图P-1所示。本模型由知识的深度(iOS基础和设计模式)和知识的广度两部分构成,知识的广度包括软技能、开发运维、实验、测试、项目管理方法。软技能(比如沟通和领导技巧)被赋予了极高的重要性,因为它们对于推动进展和领导团队至关重要。本书的第四部分将以一个实际案例作为结束,展示如何将书中学到的概念应用到职业发展中。