mvc架構優缺點的問題,透過圖書和論文來找解法和答案更準確安心。 我們找到下列懶人包和總整理

mvc架構優缺點的問題,我們搜遍了碩博士論文和台灣出版的書籍,推薦(印)沙克蒂·坦沃寫的 並行編程實戰:基於C# 8和.NET Core 3 和李雲鵬的 移動開發架構設計實戰都 可以從中找到所需的評價。

另外網站MVC框架理解及优缺点 - 博客园也說明:MVC 框架理解及优缺点 · 1、增加了系统结构和实现的复杂性。对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多 ...

這兩本書分別來自清華大學 和電子工業所出版 。

朝陽科技大學 資訊與通訊系 林傳筆所指導 李承剛的 響應式網站暨會計系統設計與開發 (2017),提出mvc架構優缺點關鍵因素是什麼,來自於響應式網站、MVC架構、會計系統、資料庫管理系統。

最後網站技术指南:MVC是什么-合理的设计我们的应用| 巴比特則補充:能够在项目中应用MVC 架构模式任务实现12.1 MVC 应用程序开发人员在 ... 的优点,有优点,也必然存在一些缺点,下面我们来看一下MVC 模式的优缺点。

接下來讓我們看這些論文和書籍都說些什麼吧:

除了mvc架構優缺點,大家也想知道這些:

並行編程實戰:基於C# 8和.NET Core 3

為了解決mvc架構優缺點的問題,作者(印)沙克蒂·坦沃 這樣論述:

本書詳細闡述了與並行程式設計相關的基本解決方案,主要包括並行程式設計簡介、任務並行性、實現資料並行、使用PLINQ、同步原語、使用併發集合、通過延遲初始化提高性能、非同步程式設計詳解、基於任務的非同步程式設計基礎、使用Visual Studio調試任務、編寫並行和非同步代碼的單元測試用例、ASP.NET Core中的IIS和Kestrel、並行程式設計中的模式、分散式存儲管理等內容。此外,本書還提供了相應的示例、代碼,以幫助讀者進一步理解相關方案的實現過程。 本書適合作為高等院校電腦及相關專業的教材和教學參考書,也可作為相關開發人員的自學讀物和參考手冊。 沙克蒂·坦沃是Te

chpro Compsoft Pvt Ltd(一家資訊技術諮詢提供商)的首席執行官。他是一名技術推廣人員和軟體架構師,在軟體發展和企業培訓方面擁有超過15年的經驗。Shakti是一名Microsoft認證培訓師,並且一直與Microsoft合作在中東地區開展培訓。他的專業領域包括.NET、Azure機器學習、人工智慧、純函數式程式設計的應用和平行計算等。 第1篇 執行緒、多工和非同步基礎 第1章 並行程式設計簡介 3 1.1 技術要求 3 1.2 為多核計算做準備 4 1.2.1 進程 4 1.2.2 硬體和應用程式的性能 4 1.2.3 多工 4 1.2.4 超執行緒 5 1.2.5 Fl

ynn分類法 6 1.2.6 執行緒 7 1.2.7 執行緒類型 7 1.2.8 執行緒單元狀態 7 1.2.9 多執行緒 10 1.2.10 Thread類 12 1.2.11 使用Thread類的優缺點 16 1.2.12 ThreadPool類 17 1.2.13 使用ThreadPool的優缺點 19 1.2.14 BackgroundWorker 20 1.2.15 使用BackgroundWorker的優缺點 23 1.2.16 多執行緒與多工對比 24 1.3 適用並行程式設計技術的場景 24 1.4 並行程式設計的優缺點 25 1.5 小結 26 1.6 牛刀小試 26 第2章

任務並行性 29 2.1 技術要求 29 2.2 任務 29 2.3 創建和啟動任務 30 2.3.1 System.Threading.Tasks.Task類 31 2.3.2 System.Threading.Tasks.Task.Factory.StartNew方法 32 2.3.3 System.Threading.Tasks.Task.Run方法 33 2.3.4 System.Threading.Tasks.Task.Delay方法 33 2.3.5 System.Threading.Tasks.Task.Yield方法 34 2.3.6 System.Threading.Tas

ks.Task.FromResult方法 36 2.3.7 System.Threading.Tasks.Task.FromException和System.Threading.Tasks.Task.FromException方法 37 2.3.8 System.Threading.Tasks.Task.FromCanceled和System.Threading.Tasks.Task.FromCanceled方法 37 2.4 從完成的任務中獲取結果 38 2.5 取消任務 39 2.5.1 創建權杖 40 2.5.2 使用權杖創建任務 40 2.5.3 通過IsCancellationReq

uested屬性輪詢權杖的狀態 41 2.5.4 註冊請求取消的回檔 42 2.6 等待正在運行的任務 44 2.6.1 Task.Wait 44 2.6.2 Task.WaitAll 45 2.6.3 Task.WaitAny 45 2. Task.WhenAll 46 2.6.5 Task.WhenAny 46 2.7 處理任務異常 47 2.7.1 處理來自單個任務的異常 47 2.7.2 處理來自多個任務的異常 48 2.7.3 使用回呼函數處理任務異常 49 2.8 將APM模式轉換為任務 50 2.9 將EAP模式轉換為任務 52 2.10 有關任務的更多資訊 54 2.10.1

後續任務 54 2.10.2 使用Task.ContinueWith方法繼續執行任務 54 2.10.3 使用Task.Factory.ContinueWhenAll和Task.Factory.ContinueWhenAll繼續執行任務 55 2.10.4 使用Task.Factory.ContinueWhenAny和Task.Factory. ContinueWhenAny繼續執行任務 56 2.10.5 父任務和子任務 57 2.10.6 創建一個分離的子任務 57 2.10.7 創建一個附加的任務 58 2.11 工作竊取佇列 59 2.12 小結 62 2.13 牛刀小試 62 第3章

實現資料並行 65 3.1 技術要求 65 3.2 從順序迴圈到並行迴圈 65 3.2.1 使用Parallel.Invoke方法 66 3.2.2 使用Parallel.For方法 68 3.2.3 使用Parallel.ForEach方法 69 3.3 瞭解並行度 70 3.4 在並行迴圈中創建自訂分區策略 72 3.4.1 範圍分區 73 3.4.2 塊分區 73 3.5 取消迴圈 74 3.5.1 使用Parallel.Break 75 3.5.2 使用ParallelLoopState.St0p 76 3.5.3 使用CancellationToken 77 3.6 瞭解並行迴圈中

的執行緒存儲 79 3.6.1 執行緒區域變數 79 3.6.2 分區區域變數 80 3.7 小結 81 3.8 牛刀小試 81 第4章 使用PLINQ 83 4.1 技術要求 83 4.2 .NET中的LINQ提供程式 84 4.3 編寫PLINQ查詢 84 4.3.1 關於ParallelEnumerable類 85 4.3.2 編寫第#一個PLINQ查詢 85 4.4 在並存執行時保持順序 86 4.4.1 使用AsOrdered()方法 87 4.4.2 使用AsUnOrdered()方法 88 4.5 PLINQ中的合併選項 88 4.5.1 使用N0tBuffered合併選項 88

4.5.2 使用AutoBuffered合併選項 89 4.5.3 使用FullyBuffered合併選項 90 4.6 使用PLINQ拋出和處理異常 92 4.7 組合並行和順序LINQ查詢 94 4.8 取消PLINQ查詢 95 4.9 使用PLINQ進行並行程式設計時要考慮的事項 97 4.10 影響PLINQ性能的因素 97 4.10.1 並行度 97 4.10.2 合併選項 98 4.10.3 分區類型 98 4.10.4 確定是保持循序執行還是轉向並行 98 4.10.5 操作順序 98 4.10.6 使用ForAll 99 4.10.7 強制並行 99 4.10.8 生成序列

99 4.11 小結 100 4.12 牛刀小試 100 第2篇 支持.NET Core中並行性的資料結構 第5章 同步原語 105 5.1 技術要求 105 5.2 關於同步原語 105 5.3 互鎖操作 106 5.3.1 .NET中的記憶體屏障 108 5.3.2 重新排序 108 5.3.3 記憶體屏障的類型 109 5.3.4 避免使用構造對代碼進行重新排序 110 5.4 鎖原語 111 5.4.1 鎖的工作方式 111 5.4.2 執行緒狀態 111 5.4.3 阻塞與自旋 113 5.5 鎖、互斥鎖和信號量 113 5.5.1 鎖 114 5.5.2 互斥鎖 116 5.5.

3 信號量 118 5.5.4 ReaderWriterLock 120 5.6 信號原語 120 5.6.1 Thread.Join 120 5.6.2 EventWaitHandle 122 5.6.3 AutoResetEvent 122 5. ManualResetEvent 123 5.6.5 WaitHandle 125 5.7 羽量級同步原語 129 5.7.1 Slim鎖 129 5.7.2 ReaderWriterLockSlim 130 5.7.3 SemaphoreSlim 131 5.7.4 ManualResetEventSlim 132 5.8 屏障和倒數事件 13

3 5.9 使用Barrier和CountDownEvent的案例研究 133 5.10 SpinWait 136 5.11 自旋鎖 136 5.12 小結 137 5.13 牛刀小試 138 第6章 使用併發集合 141 6.1 技術要求 141 6.2 併發集合詳解 141 6.2.1 關於IProducerConsumerCollection 142 6.2.2 使用ConcurrentQueue 143 6.2.3 使用佇列解決生產者-消費者問題 143 6.2.4 使用併發佇列解決問題 145 6.2.5 Queue與ConcurrentQueue性能對比 146 6.2.6 使用C

oncurrentStack 146 6.2.7 創建併發堆疊 146 6.2.8 使用ConcurrentBag 148 6.2.9 使用BlockingCollection 149 6.2.10 創建BlockingCollection 150 6.3 多生產者-消費者應用場景 151 使用ConcurrentDictionary 153 6.5 小結 154 6.6 牛刀小試 155 第7章 通過延遲初始化提高性能 157 7.1 技術要求 157 7.2 延遲初始化概念簡析 157 7.3 關於System.Lazy 161 7.3.1 封裝在構造函數中的構造邏輯 161 7.3.2

作為委託傳遞給Lazy的構造邏輯 162 7.4 使用延遲初始化模式處理異常 163 7.4.1 初始化期間沒有異常發生 1 7.4.2 使用異常緩存初始化時出現隨機異常 1 7.4.3 不緩存異常 166 7.5 執行緒本機存放區的延遲初始化 167 7.6 減少延遲初始化的開銷 169 7.7 小結 171 7.8 牛刀小試 172 第3篇 使用C#進行非同步程式設計 第8章 非同步程式設計詳解 175 8.1 技術要求 175 8.2 程式執行的類型 175 8.2.1 理解同步程式執行 176 8.2.2 理解非同步程式執行 177 8.3 適合使用非同步程式設計的情形 178 8.

3.1 編寫非同步代碼 179 8.3.2 使用Delegate類的BeginInvoke方法 179 8.3.3 使用Task類 181 8.3.4 使用IAsyncResult介面 181 8.4 不宜使用非同步程式設計的情形 183 8.5 使用非同步代碼可以解決的問題 183 8.6 小結 184 8.7 牛刀小試 185 第9章 基於任務的非同步程式設計基礎 187 9.1 技術要求 187 9.2 關於async和await關鍵字 187 9.2.1 使用async和await關鍵字的原因 188 9.2.2 非同步方法的返回類型 191 9.3 非同步委託和Lambda運算式 1

92 9.4 基於任務的非同步模式 192 9.4.1 編譯器方法,使用async關鍵字 193 9.4.2 手動實現TAP 193 9.5 非同步代碼的異常處理 194 9.5.1 返回Task並拋出異常的方法 194 9.5.2 從try-catch塊外部調用非同步方法並且不帶await關鍵字 194 9.5.3 從try-catch塊內部調用非同步方法並且不帶await關鍵字 196 9.5.4 從try-catch塊外部使用await關鍵字調用非同步方法 198 9.5.5 返回void的方法 199 9.6 使用PLINQ實現非同步 200 9.7 衡量非同步代碼的性能 201 9.

8 使用非同步代碼的準則 203 9.8.1 避免使用非同步void 204 9.8.2 使用非同步連鎖鏈 204 9.8.3 盡可能使用ConfigureAwait 205 9.9 小結 205 9.10 牛刀小試 205 第4篇 非同步代碼的調試、診斷和單元測試 第10章 使用Visual Studio調試任務 209 10.1 技術要求 209 10.2 使用Visual Studio 2019進行調試 209 10.3 如何調試執行緒 210 10.4 使用並行堆疊視窗 212 10.4.1 使用並行堆疊視窗進行調試 213 10.4.2 執行緒視圖 213 10.4.3 任務視圖

215 10.4.4 使用並行觀察視窗進行調試 216 10.5 使用併發視覺化器 217 10.5.1 利用率視圖 219 10.5.2 執行緒視圖 219 10.5.3 核心視圖 220 10.6 小結 220 10.7 牛刀小試 221 10.8 深入閱讀 222 第11章 編寫並行和非同步代碼的單元測試用例 223 11.1 技術要求 223 11.2 使用.NET Core進行單元測試 224 11.3 瞭解編寫非同步代碼的單元測試用例的問題 226 11.4 編寫並行代碼和非同步代碼的單元測試用例 228 11.4.1 檢查成功的結果 229 11.4.2 檢查除數為0時的異常結果

229 11.5 使用Moq類比非同步代碼的設置 230 11.6 使用測試工具 232 11.7 小結 233 11.8 牛刀小試 233 11.9 深入閱讀 234 第5篇 .NET Core附加的並行程式設計功能 第12章 ASP.NET Core中的IIS和Kestrel 237 12.1 技術要求 237 12.2 IIS執行緒模型 237 12.2.1 避免饑餓演算法 238 12.2.2 爬山演算法 238 12.3 Kestrel執行緒模型 239 12.3.1 ASP.NET Core 1.x 241 12.3.2 ASP.NET Core 2.x 241 12.4 微服

務中執行緒的#佳實踐 242 12.4.1 單執行緒單進程微服務 242 12.4.2 單執行緒多進程微服務 243 12.4.3 多執行緒單進程微服務 243 12.4.4 非同步服務 243 12.4.5 專用線程池 243 12.5 在ASP.NET MVC Core中使用非同步 245 12.5.1 創建非同步Web API 245 12.5.2 非同步流 248 12.6 小結 251 12.7 牛刀小試 251 第13章 並行程式設計中的模式 253 13.1 技術要求 253 13.2 MapReduce模式 253 13.2.1 映射和歸約 253 13.2.2 使用LINQ實

現MapReduce 254 13.3 聚合 257 13.4 分/合併模式 258 13.5 推測處理模式 259 13.6 延遲模式 260 13.7 共用狀態模式 263 13.8 小結 263 13.9 牛刀小試 2 第14章 分散式存儲管理 265 14.1 技術要求 265 14.2 分散式系統簡介 265 14.3 共用存儲模型與分散式存儲模型 267 14.3.1 共用存儲模型 267 14.3.2 分散式存儲模型 268 14.4 通信網路的類型 270 14.4.1 靜態通信網路 …… 附錄

響應式網站暨會計系統設計與開發

為了解決mvc架構優缺點的問題,作者李承剛 這樣論述:

本研究為中國正一道教總會(簡稱委託方)委託的產學合作案,針對委託方需求打造一個行銷網站與管理平台。系統環境是使用MVC(Model-View-Controller)架構所開發響應式網站,並使用程式語言PHP(Hypertext Preprocessor)連結資料庫管理系統,來達到資料庫資料的顯示與調整。本網站使用的是響應式網站技術(Responsive Web Design, RWD),是指網站能自動偵測使用者瀏覽裝置的尺寸,針對不同螢幕的大小而自動調整網頁圖文內容,讓使用者在用不同裝置瀏覽網站時,給使用者最佳瀏覽畫面。另外,依照委託方平常記帳的習慣,而客製化打造一套且符合政府會計規定的會計

系統,使用網頁進行記帳,取代傳統紙本記帳的方式,讓會計人員節省手寫傳票、記錄報表與金額計算的時間,以系統輸出報表的方式提升整體效率,取代原本繁瑣的方式,使用更簡潔的方式達到原本所需流程。

移動開發架構設計實戰

為了解決mvc架構優缺點的問題,作者李雲鵬 這樣論述:

本書覆蓋了移動開發中涉及的多種架構模式,基於Android平臺對架構模式進行實戰,可以説明入門開發者瞭解架構模式,進階開發者掌握架構模式,技術領導者進行架構選型。本書內容包括:流行架構模型MVX系列——MVC架構、MVP架構、MVVM架構,依賴注入框架Dagger2,函數回應式框架RxJava2,Google推薦的生命週期感知架構組件AAC,整潔的架構“The Clean Architecture”和元件化架構的運用方法與實戰。本書語言精練,內容清晰,代碼易於理解,適合電腦相關行業的從業者閱讀與學習。 李雲鵬 網易新聞架構技術組工程師,沐暄網創始人,Oracle、Adob

e等企業認證專家;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 使用Observa

bleField 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 Subscrib

er和事件流 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 LiveDat

a 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 日記清單展示組件 20

0 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 1

2.3.5 執行用例 230 12.3.6 封裝請求數據 231 12.3.7 創建日記更新 推薦序 Android系統自Google 2008年發佈以來, 經過十多年的發展,已經佔據了手持設備八成以上的市場份額。在此過程中,有很多非常優秀的開發者加入這個行業,移動開發經過近幾年的快速蓬勃發展,在傳統的設計思想上有了更多的更新和創新,同時也湧現出不少高效的工具。 軟體架構是對軟體整體結構與元件的抽象描述,但在實際專案和產品反覆運算中,架構不僅涉及軟體本身,還涉及團隊組成、業務現狀及發展方向、團隊文化、投入產出比等多方面。如何基於業務做出更合理的設計?如何平衡業務和技術?

如何在做出決策後順利落地?從這些方面考慮,需要明確以下幾個問題: ·通用的架構有哪些? ·每個架構的適用場景和優缺點是什麼? ·架構的設計原則是什麼? ·架構之間是如何演化的? ·在架構設計實戰的過程中會遇到哪些問題?該如何解決? 作者從架構的定義開始,對MVC、MVP、MVVM等多種架構模式進行了詳細的闡述,並輔以案例講解。通過講解多個實戰案例回答了上述問題。本書非常適合移動開發領域的初、中級工程師閱讀,也適合高級工程師閱讀,以作參考。 ——網易新聞技術總監 劉棉明