新書推薦:
《
揉碎浪漫(全两册)
》
售價:HK$
70.3
《
古籍善本
》
售價:HK$
537.6
《
人民币国际化报告2024:可持续全球供应链体系与国际货币金融变革
》
售價:HK$
87.4
《
道德经新注 81幅作者亲绘哲理中国画,图文解读道德经
》
售價:HK$
143.4
《
清俗纪闻
》
售價:HK$
98.6
《
镜中的星期天
》
售價:HK$
76.2
《
世界前沿技术发展报告2024
》
售價:HK$
188.2
《
可转债——新手理财的极简工具
》
售價:HK$
65.0
|
編輯推薦: |
专注:50 实战案例。填补移动开发架构设计书籍空白
全面:10 架构模式。流行移动端架构全面囊括
实战:10 系统设计实战。代码注释丰富,易于理解
易读:学习门槛低。内容精练,语言通俗易懂
|
內容簡介: |
本书覆盖了移动开发中涉及的多种架构模式,基于Android平台对架构模式进行实战,可以帮助入门开发者了解架构模式,进阶开发者掌握架构模式,技术领导者进行架构选型。本书内容包括:流行架构模型MVX系列——MVC架构、MVP架构、MVVM架构,依赖注入框架Dagger2,函数响应式框架RxJava2,Google推荐的生命周期感知架构组件AAC,整洁的架构“The Clean Architecture”和组件化架构的运用方法与实战。本书语言精练,内容清晰,代码易于理解,适合计算机相关行业的从业者阅读与学习。
|
關於作者: |
李云鹏,网易新闻架构技术组工程师,沐暄网创始人,Oracle、Adobe等企业认证专家;10年互联网经验,曾就职于世界500强企业核心技术实验室;于2009年创立沐暄网,2010年入围凤凰网“全球最具影响力的中文论坛100强”站长。擅长移动端架构设计、项目重构与Intellij插件开发等工作。参与网易新闻组件化架构设计,视频模块、统计模块等多模块重构工作,利用VIPER对客户端基础架构进行改良。喜欢创新和研究,作为第一发明人,申请了十余项专利和著作权。
|
目錄:
|
第1章 什么是架构 1
1.1 架构设计理念 1
1.1.1 软件架构的起源 1
1.1.2 架构设计三要素 2
1.1.3 什么是优秀的软件架构设计 2
1.1.4 软件架构设计的关注点 3
1.2 软件架构设计的本质和目的 3
1.2.1 做出决策 3
1.2.2 降低软件熵 4
1.3 架构设计思维 4
1.3.1 简化思维 4
1.3.2 分层思维 5
1.3.3 分治思维 6
1.3.4 迭代思维 6
1.4 架构设计模式原则 7
1.4.1 单一职责原则 7
1.4.2 开放封闭原则 8
1.4.3 里氏替换原则 9
1.4.4 依赖倒置原则 9
1.4.5 接口分离原则 10
1.5 架构设计步骤 11
1.5.1 认识系统 11
1.5.2 设计系统 12
1.5.3 创建系统 14
1.5.4 收集反馈 14
1.6 小结 15
第2章 MVC架构:表现层分离 16
2.1 什么是MVC 16
2.1.1 MVC的诞生 16
2.1.2 MVC的分层与职责 17
2.1.3 MVC在移动开发中的争议 18
2.2 MVC的模式 19
2.2.1 被动模式 19
2.2.2 主动模式 19
2.2.3 观察者模式 20
2.2.4 被动模式与主动模式的区别 21
2.3 MVC的核心思想 21
2.4 小结 22
第3章 实战:基于MVC架构设计的日记App 23
3.1 层级职责划分 23
3.2 准备阶段 24
3.2.1 准备、创建View 24
3.2.2 清单文件Manifest配置 26
3.2.3 初始化Fragment 27
3.3 创建View 28
3.4 数据处理 31
3.4.1 创建Model 31
3.4.2 创建本地数据源 32
3.4.3 数据持久化工具 33
3.4.4 实现本地数据源 34
3.4.5 填充测试数据 36
3.4.6 使用数据仓库管理数据 37
3.5 创建Controller 40
3.5.1 Controller初始化 40
3.5.2 创建Adapter 41
3.5.3 创建ViewHolder 43
3.5.4 Controller的协调工作 44
3.6 运行App 48
3.7 实现主动模式的MVC 49
3.7.1 改造Model 49
3.7.2 注册观察者 50
3.8 小结 50
第4章 MVP架构:开始解耦 52
4.1 什么是MVP 52
4.1.1 MVP架构的起源 52
4.1.2 MVP的分层与职责 52
4.2 MVP的核心思想 53
4.2.1 面向接口编程 53
4.2.2 德墨忒尔定律 54
4.3 MVP与MVC的区别 55
4.4 MVP模式存在的问题 56
4.4.1 责任过重的Presenter 56
4.4.2 业务逻辑无法复用 56
4.4.3 急剧扩增的接口数量 57
4.5 如何解决Presenter的复用问题 57
4.5.1 提供工具类 57
4.5.2 提供多对一的Presenter 57
4.5.3 分离出Interactor层 58
4.6 小结 59
第5章 实战:MVP架构设计 60
5.1 层级职责划分 60
5.2 准备工作 60
5.2.1 定义基础View接口 60
5.2.2 定义基础Presenter接口 61
5.3 重构:从MVC到MVP 61
5.3.1 创建Presenter 61
5.3.2 改造View 62
5.3.3 传入Presenter实例 63
5.3.4 开发过程中Presenter和View的直接依赖 63
5.3.5 Presenter生命周期的处理 64
5.3.6 列表Adapter的处理 64
5.3.7 展示数据的处理 65
5.3.8 对话框展示的处理 67
5.3.9 菜单的处理 68
5.3.10 实现面向接口设计 69
5.3.11 建立契约类 69
5.4 实现MVP模式:日记修改功能 70
5.4.1 创建日记修改Activity 71
5.4.2 创建日记修改Fragment 72
5.4.3 添加完成按钮 74
5.4.4 创建日记修改Presenter 75
5.4.5 日记操作处理 76
5.4.6 页面跳转处理 77
5.4.7 删除旧有的修改日记UI 78
5.4.8 修改为面向接口设计 79
5.5 小结 79
第6章 MVVM架构:双向绑定 81
6.1 什么是MVVM 81
6.1.1 MVVM架构的起源 81
6.1.2 MVVM的分层与职责 82
6.2 MVVM的核心思想 82
6.2.1 进一步解耦 82
6.2.2 数据驱动 83
6.2.3 双向绑定 83
6.3 架构模式对比 84
6.3.1 MVC与MVVM 84
6.3.2 MVP与MVVM 85
6.4 MVVM存在的问题 86
6.4.1 ViewModel难以复用 86
6.4.2 学习成本高 86
6.4.3 调试困难 86
6.5 小结 87
第7章 实战:MVVM架构设计 88
7.1 什么是DataBinding 88
7.2 重构:从MVP到MVVM 88
7.2.1 配置DataBinding支持 89
7.2.2 修改Presenter为ViewModel 89
7.2.3 消除契约类 90
7.2.4 转换布局文件 92
7.2.5 在布局中加入变量和表达式 93
7.2.6 ViewModel继承BaseObservable 94
7.2.7 在XML布局文件中定义列表数据属性 95
7.2.8 使用BindingAdapter处理自定义属性 97
7.2.9 绘制View布局 98
7.2.10 为View属性赋值 99
7.2.11 找到XML中的View 100
7.2.12 ObservableField原理 100
7.2.13 使用ObservableField 101
7.2.14 使用ObservableList 103
7.3 小结 104
第8章 依赖注入:Dagger2锋利的匕首 105
8.1 什么是Dagger 105
8.1.1 依赖注入 105
8.1.2 编译时注解解析 107
8.2 实现:将Dagger2加入MVP 108
8.2.1 配置Dagger2 108
8.2.2 确定数据仓库改造目标 108
8.2.3 改造数据仓库 109
8.2.4 Inject注解 110
8.2.5 Component注解 111
8.2.6 Module注解 114
8.2.7 Provides注解 115
8.2.8 Scope注解 117
8.2.9 Singleton注解 117
8.2.10 Scope注解和Singleton注解的实现原理 118
8.2.11 日记列表模块依赖关系分析 120
8.2.12 创建日记列表模块Component 120
8.2.13 创建日记列表Presenter Module 121
8.2.14 Component的dependencies属性 123
8.3 存在的问题 125
8.3.1 学习成本极高 125
8.3.2 短期内开发效率低 125
8.3.3 灵活性不良好 126
8.4 小结 126
第9章 函数响应式框架:优雅的RxJava2 127
9.1 什么是RxJava 127
9.2 RxJava2的核心思想 128
9.2.1 函数响应式编程 128
9.2.2 背压 129
9.2.3 链式调用 129
9.3 实战:将RxJava2加入MVP 130
9.3.1 配置RxJava2 130
9.3.2 Flowable 131
9.3.3 响应式拉取 132
9.3.4 修改数据源接口 133
9.3.5 修改本地数据源 133
9.3.6 Just操作符 134
9.3.7 Empty操作符 135
9.3.8 FromIterable操作符 135
9.3.9 To操作符 136
9.3.10 Subscriber和事件流 137
9.3.11 修改数据仓库 137
9.3.12 FlatMap操作符 139
9.3.13 Map操作符 140
9.3.14 修改Presenter 141
9.3.15 CompositeDisposable和Disposable 142
9.3.16 Presenter生命周期 143
9.4 存在的问题 144
9.5 小结 144
第10章 AAC:搭建生命周期感知架构 145
10.1 什么是AAC 145
10.2 AAC的核心思想 146
10.2.1 关注点分离 146
10.2.2 模型驱动界面 147
10.3 ViewModel LiveData 148
10.3.1 DataBinding 148
10.3.2 Gradle依赖配置 149
10.3.3 AAC中的ViewModel 149
10.3.4 使用ViewModel 150
10.3.5 使用ViewModelProviders创建ViewModel 151
10.3.6 什么是LiveData 152
10.3.7 MutableLiveData 153
10.3.8 创建LiveData 154
10.3.9 LiveData更新 155
10.3.10 LiveData接收变化 156
10.4 LifeCycle 156
10.4.1 生命周期 157
10.4.2 LifecycleObserver 158
10.4.3 LifecycleOwner 159
10.5 Room 160
10.5.1 Room的组成 160
10.5.2 实体 161
10.5.3 数据访问对象DAO 163
10.5.4 Room依赖配置 164
10.5.5 定义实体 164
10.5.6 创建Dao 165
10.5.7 创建数据库管理器 166
10.5.8 线程处理 168
10.5.9 修改本地数据源 169
10.5.10 数据库升级 172
10.6 小结 173
第11章 组件化架构:极速运行 174
11.1 什么是组件化 174
11.2 组件化的核心思想 175
11.2.1 软件复用 175
11.2.2 信息隐藏 176
11.2.3 快速运行 177
11.3 组件分离 178
11.3.1 组件层级划分 178
11.3.2 组件划分 179
11.3.3 创建Module 180
11.3.4 组件依赖关系 183
11.3.5 复用Gradle配置 187
11.3.6 公共资源组件 189
11.3.7 基础组件 191
11.3.8 移动依赖 194
11.3.9 Gradle版本号管理 194
11.3.10 处理Context 197
11.3.11 公共组件 198
11.3.12 日记列表展示组件 200
11.3.13 日记添加修改组件 202
11.3.14 Gradle Plugin冲突 204
11.3.15 运行主Module 204
11.4 使用路由 206
11.4.1 路由配置 206
11.4.2 使用Route跳转 207
11.4.3 携带参数跳转 208
11.5 组件运行 210
11.5.1 切换开关 210
11.5.2 组件配置 212
11.5.3 Manifest文件配置 212
11.5.4 集成运行 215
11.6 组件合并 216
11.6.1 组件命名冲突 216
11.6.2 Manifest文件合并策略 217
11.6.3 资源文件冲突 218
11.6.4 资源文件合并策略 219
11.7 小结 220
第12章 The Clean Architecture:整洁的架构 221
12.1 什么是The Clean Architecture 221
12.2 The Clean Architecture的核心思想 222
12.2.1 单向依赖规则 222
12.2.2 业务规则分离 223
12.2.3 简单数据结构跨界 224
12.3 MVP-Clean架构 224
12.3.1 用例的请求数据和响应数据 224
12.3.2 用例的数据处理 226
12.3.3 用例的线程切换 228
12.3.4 创建用例 229
12.3.5 执行用例 230
12.3.6 封装请求数据 231
12.3.7 创建日记更新
|
內容試閱:
|
推荐序
Android系统自Google 2008年发布以来, 经过十多年的发展,已经占据了手持设备八成以上的市场份额。在此过程中,有很多非常优秀的开发者加入这个行业,移动开发经过近几年的快速蓬勃发展,在传统的设计思想上有了更多的更新和创新,同时也涌现出不少高效的工具。
软件架构是对软件整体结构与组件的抽象描述,但在实际项目和产品迭代中,架构不仅涉及软件本身,还涉及团队组成、业务现状及发展方向、团队文化、投入产出比等多方面。如何基于业务做出更合理的设计?如何平衡业务和技术?如何在做出决策后顺利落地?从这些方面考虑,需要明确以下几个问题:
通用的架构有哪些?
每个架构的适用场景和优缺点是什么?
架构的设计原则是什么?
架构之间是如何演化的?
在架构设计实战的过程中会遇到哪些问题?该如何解决?
作者从架构的定义开始,对MVC、MVP、MVVM等多种架构模式进行了详细的阐述,并辅以案例讲解。通过讲解多个实战案例回答了上述问题。本书非常适合移动开发领域的初、中级工程师阅读,也适合高级工程师阅读,以作参考。
网易新闻技术总监 刘棉明
前言
过去,我常常寻找一些关于移动端架构模式的资料,以帮助自己全面了解架构模式,并针对企业软件架构存在的问题,指导自己进行架构选型。在现今的技术盛世中,各种架构模式百花齐放,然而每种架构模式的概念都比较晦涩难懂,这不仅使得一部分初学者从入门到放弃,也让进阶人员耗费了太多的学习成本。
通过博客学习架构需要查阅大量的资料,而且博客中的技术资料学习门槛相对较高,所以,我总结自身经验,写成了这本书,以帮助入门开发者了解架构模式,进阶开发者掌握架构模式,技术领导者进行架构选型,并填补移动端或Android架构实战书籍的空白。
架构设计在现今已经成为软件开发必不可少的环节,而架构学习和架构选型往往是一个困难的工程。在软件设计之初,人们习惯使用面条代码进行开发,系统代码并无结构可言,由此带来的本质问题就是软件的可维护性和可靠性越来越差,软件的维护成本也越来越高,直到软件危机爆发,人们才开始意识到软件架构的重要性。
软件架构设计可以帮助我们规划系统模型,做出决策,降低软件熵,提供系统可维护性和可靠性,减少企业软件维护成本,使得系统更加有序。
本书中的代码都将上传到开源社区GitHub中,如有错误,还请谅解,欢迎大家在GitHub或我的博客林鹿(http:blog.imuxuan.com)中指出。
本书特色
1.内容丰富,语言通俗易懂,学习门槛低
阅读本书与阅读技术博客不同的是,架构模式的概念部分清晰易懂,语言精练,包含各种架构的总结性内容。我一直在思索如何表述,能让软件开发人员轻松地理解架构设计中晦涩难懂的概念,所以在每章中,加入了对于架构相关概念的通俗易懂的阐述,以及丰富的图片,以便帮助读者建立架构的记忆模型。
2.架构覆盖广泛,代码注释丰富,易于理解
本书用大量篇幅介绍了MVX系列架构MVC架构、MVP架构和MVVM架构,但软件架构从不是一成不变的,所以,本书还介绍了组件化和插件化等读者可能会加入自身架构中的技术。而对架构实战的介绍是通过还原一个架构模式的重构过程来完成的,代码注释丰富,易于理解。
3.填补了移动端架构设计和Android架构设计与实战总结类书籍的空白
过去,我一直希望有这样一本关于架构模式实战总结与指导类的书籍,能够帮助企业开发人员进行架构学习和选型。软件架构设计是一个经久不衰的话题,其生命周期较长,而架构之间的区别往往在于合适与不合适,本书可以帮助你全面了解移动端的流行架构模式,并根据自身所需进行架构学习和选型。
本书内容及体系结构
本书从内容上分为三部分,共16章。
第一部分主要介绍架构的基本概念。
第二部分列举了当下比较流行的几种架构模式,包括MVX系列架构MVC架构、MVP架构、MVVM架构,以及依赖注入框架Dagger2、函数响应式框架RxJava2、Google官方推荐的Android Architecture Components和组件化架构。
第三部分列举了更多值得推荐的,但目前并不是十分常见的框架,其中包括整洁的架构The Clean Architecture、Fragment反对者系列的Fragmentless、Conductor,还介绍了插件化架构的运用方法与实战。
第1章 什么是架构
本章将从架构的起源讲起,走入生活中的架构,探究架构的本质,掌握架构的原则,逐步深入,进而达到了解传统的架构设计思想和设计流程的目的。如果你更注重实践性的内容,可以从第2章开始阅读;如果你更注重从一根线的线头开始厘清思路,那么,就要从本章开始阅读,阅读本章能够使你更好地了解什么是架构。
第2章 MVC架构:表现层分离
面条代码是一种没有结构、紧耦合、一气呵成的代码形态。接触面条代码你会发现,所有界面展示控制和业务逻辑都缠绕在一起,改动任意一处,都将使你苦不堪言。在无数次凌乱的修改整理后,你会感受到一种剪不断,理还乱的痛苦。在探究架构的最佳实战之路上,我们还要从MVC(Model-View-Controller)开始说起,本章将要分析的是经典的MVC架构模式。
第3章 实战:基于MVC架构设计的日记App
本章将通过一个基于Android的日记App,来讨论MVC架构的两种模式被动模式和主动模式是如何实现的。
第4章 MVP架构:开始解耦
前面的章节针对MVC架构模式进行了讨论与实践,这种模式虽然践行了表现层分离,但难免会出现Massive View Controller(过重的视图控制器)。本章将讨论一种更流行的架构模式MVP架构。
第5章 实战:MVP架构设计
前面我们讨论了日记App的MVC架构被动模式和主动模式的实现。本章将对日记App的MVC架构模式进行改造,使其成为MVP架构模式,并基于MVP架构模式添加新的功能。
第6章 MVVM架构:双向绑定
前面的章节介绍了移动开发中的两个经典架构模式MVC架构和MVP架构。本章将介绍移动开发三大经典架构中的最后一种架构模式MVVM架构。
第7章 实战:MVVM架构设计
本章将会改造基于MVP架构设计的我的日记App,利用Google提供的数据绑定框架DataBinding,使其成为MVVM架构模式。
第8章 依赖注入:Dagger2锋利的匕首
依赖注入在后端领域开发中是一项非常流行的设计模式,在Google接手了Dagger的开发工作后,依赖注入在移动端也日趋火热。本章我们将在前面介绍的MVP架构的基础上,通过讲解Dagger2来使读者了解依赖注入框架的使用方法,并将其应用在我的日记App中。
第9章 函数响应式框架:优雅的RxJava2
在单任务CPU时代,任务只能串联执行,上一个任务没有执行完,下一个任务就只能等待,这样的任务处理效率极低;后来,多任务盛行起来,多个任务可以并行处理,带来了效率的提升;再后来,多任务的模式被运用到每个任务中,一个任务可以被拆分成多个线程执行,每个线程可以并行处理,多线程的时代到来了,它开启了并发,也开启了响应式编程。本章将利用RxJava2实现函数响应式框架的设计。
第10章 AAC:搭建生命周期感知架构
本章将要介绍的是Android官方推荐的系列架构组件Android Architecture Components,其中包括生命周期感知组件、LiveData、ViewModel和Room数据库的使用等。
第11章 组件化架构:极速运行
本章主要介绍各大科技公司使用的主流架构设计模式组件化架构,这种架构可以让你的工程组件更加清晰,提升软件复用性,加快开发速度,降低测试成本。
第12章 The Clean Architecture:整洁的架构
本章将通过介绍三款符合The Clean Architecture思想的架构MVP-Clean、VIPER和Riblets,使大家能够对The Clean Architecture有更加全面的了解。
第13章 Fragmentless:Fragment反对者
Fragmentless架构践行了Fragment反对者的思想,即Fragment会给程序的开发和维护带来很多不必要的问题。本章将通过View代替Fragment,来为大家演示Fragmentless架构的实现。
第14章 Conductor:短兵利刃
Conductor是一个小巧精悍的框架,用来帮助移动应用实现基于View的开发,与上一章的Fragmentless架构基于同一核心思想。本章将在MVP架构设计的我的日记App的基础上加入Conductor支持。
第15章 插件化:模块插拔
本章介绍的是插件化框架,它与模块化技术、组件化技术有着异曲同工之妙。熟练运用插件化技术,往往能给一个移动应用带来非同凡响的体验感。本章将通过分析一款插件化流行框架,来讲解插件化架构。
第16章 总结
本章是对全书涉及的架构模式的总结,将会针对每种架构模式总结其特点,并给予你架构选型的建议。
本书读者对象
本书适合任何对计算机技术感兴趣或相关领域的从业人员阅读,书中列举了多种移动端的架构模式和使用方法,但架构设计未必局限于某一平台,比如,MVC架构在后端开发中依旧广泛流行。
尤其推荐以下人群阅读本书:
移动端进阶工程师。
移动开发爱好者及从业人员。
计算机爱好者及从业人员。
|
|