Android幾種專案架構的優缺點

2021-10-07 14:43:44 字數 1835 閱讀 7157

mvc架構

mvc, 即model-view-controller, 基於頁面邏輯的修改要多於業務邏輯, 分離兩種邏輯減少類**的修改.

model: 即資料層, 負責處理業務邏輯, 監聽網路與資料庫介面.

view: 即介面(ui)層, 顯示**於model的資料.

contoller: 即邏輯層, 傳遞使用者的互動和更新model的資料.

優點

mvc模式, 分離類的ui與業務職責, 增加可測試性與可擴充套件性. model不引用任何android類, 允許單元測試(unit test). controller含有view的引用, 不引用android類, 允許單元測試. view滿足單一職責原則(srp), 傳遞事件至controller, 展示model資料, 不包含業務邏輯, 允許ui測試.

缺點

view既依賴於controller又依賴於model. 在修改ui邏輯時, 也需要修改model, 降低架構的靈活性. view與model的職責部分重疊, 過於耦合, 在處理ui邏輯時, 被動模式與主動模式都會產生若干問題.

在被動模式中, controller通知model更新資料, 並通知view顯示. 對於ui邏輯, 如果view處理, 單元測試會遺漏邏輯; 如果model處理, 則隱式地依賴於view, 導致模組增加耦合.

mvp架構

mvp架構包含三大模組, 即model, view, presenter.

model: 即資料層, 負責處理業務邏輯, 監聽網路與資料庫介面.

view: 即介面(ui)層, 展示資料, 響應使用者事件並通知presenter.

presenter: 即展示層, 接收model的資料, 處理ui邏輯, 並管理view的狀態, 根據view層事件提供展示資料.

優缺點

mvp架構更好地分離view與model之間的職責, 解除ui邏輯之間的耦合.

對於小型專案而言, 與設計模式類似, 會導致過度設計, 增加**量. 當處理複雜頁面時, presenter層會包含大量ui邏輯與業務邏輯, 非常冗餘, 並違反單一職責原理.

mvp架構的核心在於presenter層. presenter打破model與view之間的耦合, 建立展示資料的通道, 隔離業務邏輯, 支援單元測試. 還有另乙個架構, mvp的進化版mvvm.

mvvm架構

mvvm包含三個模組, model, view, viewmodel.

model: 即datamodel, 抽象資料來源, viewmodel從model中讀取或儲存資料.

view: 當使用者觸發響應事件時, 通知viewmodel, 展示提供的資料.

viewmodel: 提供view顯示的資料流.

優勢

mvvm的優勢是進一步解耦ui邏輯與業務邏輯. ​

view與viewmodel的耦合, 弱於view與presenter的耦合.

view僅是viewmodel的消費者, 當修改ui時, 不修改viewmodel.

根據業務關注點, 建立多個高內聚的view與viewmodel, 允許多個頁面共享與替換.

徹底分離ui邏輯, 使用databinding分離ui顯示與ui邏輯.

view與viewmodel一對多, viewmodel與model多對多.

viewmodel和model與ui介面完全解耦, 進一步提高可測試性.

mvvm, 與mvp類似, 也是非常優秀的架構模式, 在開發中, 使用架構比無序開發, 可以極大地提高專案的穩定性與可測性.

Android專案 幾種常見的應用架構

1 單個activity架構 推薦 首頁是activity,裡面頁面為view 這種架構的好處是思路清晰,系統執行開銷小。缺點是控制不好的話 混亂,而且生命週期不好管理。2 多個activity 利用baseactivity提供共性 3 多個activity 利用tabactivity mainac...

Android專案架構

寫於2015 06 05 android專案重構之路 架構篇 android專案重構之路 介面篇 android專案重構之路 實現篇 我將專案分為了四個層級 模型層 介面層 核心層 介面層。模型層定義了所有的模型 介面層封裝了伺服器提供的api 核心層處理所有業務邏輯 介面層就處理介面的展示。幾個層...

優酷專案整體架構

管理員檢視 1 註冊 2 登陸 5 發布公告 使用者檢視 1 註冊 2 登陸 3 會員充值 7 檢視觀影記錄 8 檢視公告 優酷 首先以註冊功能為例 1 首先將使用者數的資料進行打包傳送到服務端中 2 服務端根據接受的資料首先進行解包,按照包內的資訊進行指定操作 3 呼叫邏輯層中的指定介面來進行操作...