| 作者 |
| 李云鹏 |
| 丛书名 |
| 出版社 |
| 电子工业出版社 |
| ISBN |
| 9787121375071 |
| 简要 |
| 简介 |
| 内容简介书籍计算机书籍 本书覆盖了移动开发中涉及的多种架构模式,基于Android平台对架构模式进行实战,可以帮助入门开发者了解架构模式,进阶开发者掌握架构模式,技术领导者进行架构选型。 本书内容包括:流行架构模型MVX系列——MVC架构、MVP架构、MVVM架构,依赖注入框架Dagger2,函数响应式框架RxJava2,Google推荐的生命周期感知架构组件AAC,整洁的架构“The Clean Architecture”和组件化架构的运用方法与实战。 本书语言精练,内容清晰,代码易于理解,适合计算机相关行业的从业者阅读与学习。 |
| 目录 |
| 第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 创建日记更新用例 234 12.3.8 重构日记修改Presenter 235 12.4 VIPER架构 238 12.4.1 什么是VIPER架构 238 12.4.2 VIPER架构的层级划分 239 12.4.3 创建Interactor 240 12.4.4 在协议中加入Interactor 241 12.4.5 使用Interactor 242 12.4.6 创建Router 242 12.4.7 在协议中加入Router 244 12.4.8 使用Router 244 12.5 Riblets架构 245 12.5.1 什么是Riblets架构 245 12.5.2 Riblets架构的组件 246 12.6 小结 247 第13 Fragmentless:Fragment反对者 248 13.1 什么是Fragmentless 248 13.2 Fragmentless实战 249 13.2.1 创建View 249 13.2.2 View附加状态判断 252 13.2.3 修改布局文件 253 13.2.4 修改Activity 254 13.3 小结 255 第14章 Conductor:短兵利刃 257 14.1 什么是Conductor 257 14.2 Conductor实战 258 14.2.1 配置Conductor 259 14.2.2 Controller基类处理 259 14.2.3 重构Fragment 260 14.2.4 Controller的上下文 261 14.2.5 Controller活跃态 262 14.2.6 使用路由 262 14.2.7 日记修改页面处理 263 14.2.8 Controller构造方法 265 14.2.9 页面销毁 266 14.2.10 页面跳转 266 14.3 小结 267 第15章 插件化:模块插拔 268 15.1 什么是插件化 268 15.2 插件化实战 269 15.2.1 配置插件化框架 269 15.2.2 配置主模块 270 15.2.3 验证环境配置 270 15.2.4 框架初始化 271 15.2.5 指定插件类型 272 15.2.6 配置路由信息 272 15.2.7 创建加载页面 275 15.2.8 路由携带参数跳转 276 15.2.9 配置插件的Launcher 276 15.2.10 编译 277 15.3 小结 278 第16章 总结 279 16.1 架构演进 279 16.1.1 MVX系列架构 279 16.1.2 The Clean Architecture系列架构 280 16.1.3 模块化系列架构 281 16.2 选择合适的架构 282 16.2.1 认清你的团队规模 282 16.2.2 目前存在的问题 283 16.2.3 大型技术团队架构选型 283 16.2.4 中小型技术团队架构选型 284 16.2.5 独立开发者架构选型 285 16.3 复盘 285 |