第1章 什么是架构
1.1 架构设计理念
1.1.1 软件架构的起源
1.1.2 架构设计三要素
1.1.3 什么是优秀的软件架构设计
1.1.4 软件架构设计的关注点
1.2 软件架构设计的本质和目的
1.2.1 做出决策
1.2.2 降低软件熵
1.3 架构设计思维
1.3.1 简化思维
1.3.2 分层思维
1.3.3 分治思维
1.3.4 迭代思维
1.4 架构设计模式原则
1.4.1 单一职责原则
1.4.2 开放封闭原则
1.4.3 里氏替换原则
1.4.4 依赖倒置原则
1.4.5 接口分离原则
1.5 架构设计步骤
1.5.1 认识系统
1.5.2 设计系统
1.5.3 创建系统
1.5.4 收集反馈
1.6 小结
第2章 MVC架构:表现层分离
2.1 什么是MVC
2.1.1 MVC的诞生
2.1.2 MVC的分层与职责
2.1.3 MVC在移动开发中的争议
2.2 MVC的模式
2.2.1 被动模式
2.2.2 主动模式
2.2.3 观察者模式
2.2.4 被动模式与主动模式的区别
2.3 MVC的核心思想
2.4 小结
第3章 实战:基于MVC架构设计的日记App
3.1 层级职责划分
3.2 准备阶段
3.2.1 准备、创建View
3.2.2 清单文件Manifest配置
3.2.3 初始化Fragment
3.3 创建View
3.4 数据处理
3.4.1 创建Model
3.4.2 创建本地数据源
3.4.3 数据持久化工具
3.4.4 实现本地数据源
3.4.5 填充测试数据
3.4.6 使用数据仓库管理数据
3.5 创建Controller
3.5.1 Controller初始化
3.5.2 创建Adapter
3.5.3 创建ViewHolder
3.5.4 Controller的协调工作
3.6 运行App
3.7 实现主动模式的MVC
3.7.1 改造Model
3.7.2 注册观察者
3.8 小结
第4章 MVP架构:开始解耦
4.1 什么是MVP
4.1.1 MVP架构的起源
4.1.2 MVP的分层与职责
4.2 MVP的核心思想
4.2.1 面向接口编程
4.2.2 德墨忒尔定律
4.3 MVP与MVC的区别
4.4 MVP模式存在的问题
4.4.1 责任过重的Presenter
4.4.2 业务逻辑无法复用
4.4.3 急剧扩增的接口数量
4.5 如何解决Presenter的复用问题
4.5.1 提供工具类
4.5.2 提供多对一的Presenter
4.5.3 分离出Interactor层
4.6 小结
第5章 实战:MVP架构设计
5.1 层级职责划分
5.2 准备工作
5.2.1 定义基础View接口
5.2.2 定义基础Presenter接口
5.3 重构:从MVC到MVP
5.3.1 创建Presenter
5.3.2 改造View
5.3.3 传入Presenter实例
5.3.4 开发过程中Presenter和View的直接依赖
5.3.5 Presenter生命周期的处理
5.3.6 列表Adapter的处理
5.3.7 展示数据的处理
5.3.8 对话框展示的处理
5.3.9 菜单的处理
5.3.10 实现面向接口设计
5.3.11 建立契约类
5.4 实现MVP模式:日记修改功能
5.4.1 创建日记修改Activity
5.4.2 创建日记修改Fragment
5.4.3 添加“完成”按钮
5.4.4 创建日记修改Presenter
5.4.5 日记操作处理
5.4.6 页面跳转处理
5.4.7 删除旧有的修改日记UI
5.4.8 修改为面向接口设计
5.5 小结
第6章 MVVM架构:双向绑定
6.1 什么是MVVM
6.1.1 MVVM架构的起源
6.1.2 MVVM的分层与职责
6.2 MVVM的核心思想
6.2.1 进一步解耦
6.2.2 数据驱动
6.2.3 双向绑定
6.3 架构模式对比
6.3.1 MVC与MVVM
6.3.2 MVP与MVVM
6.4 MVVM存在的问题
6.4.1 ViewModel难以复用
6.4.2 学习成本高
6.4.3 调试困难
6.5 小结
第7章 实战:MVVM架构设计
7.1 什么是DataBinding
7.2 重构:从MVP到MVVM
7.2.1 配置DataBinding支持
7.2.2 修改Presenter为ViewModel
7.2.3 消除契约类
7.2.4 转换布局文件
7.2.5 在布局中加入变量和表达式
7.2.6 ViewModel继承BaseObservable
7.2.7 在XML布局文件中定义列表数据属性
7.2.8 使用BindingAdapter处理自定义属性
7.2.9 绘制View布局
7.2.10 为View属性赋值
7.2.11 找到XML中的View
7.2.12 ObservableField原理
7.2.13 使用ObservableField
7.2.14 使用ObservableList
7.3 小结
第8章 依赖注入:Dagger2锋利的“匕首”
8.1 什么是Dagger
8.1.1 依赖注入
8.1.2 编译时注解解析
8.2 实现:将Dagger2加入MVP
8.2.1 配置Dagger2
8.2.2 确定数据仓库改造目标
8.2.3 改造数据仓库
8.2.4 Inject注解
8.2.5 Component注解
8.2.6 Module注解
8.2.7 Provides注解
8.2.8 Scope注解
8.2.9 Singleton注解
展开