內容簡介
本書覆蓋了移動開發中涉及的多種架構模式,基於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.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.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.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,第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.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.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.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