Android 設計模式對比

來源:互聯網
上載者:User

標籤:代碼   事件   關係   開始   國內   present   alt   reset   add   

引言:

Android架構的發展的過程就是一個不斷化繁為簡的過程,大家都在研究如何正確方便高效的規範代碼。當然這條路也永遠不會停止,就像新的芽兒,隨著時間的流逝,每天都在長出新的枝葉,每天都在成長。對於技術,每次新架構的提出都在剔除舊架構的詬病和痛點,演變成更方便,更高效,更簡潔的新架構,然後新的架構在具體使用中又會帶來新的詬病和痛點,反反覆複,無窮盡也......從開始使用MVC到使用MVP,從MVP到MVVM,每次架構的提出都有讓我們眼前一亮的東西,但具體使用中確還是存在很多的痛點,似乎一直存在一種反作用力來阻止我這樣做。但又能怎樣?新的芽兒註定會長成參天大樹,技術終究只會進步。

 

概述 

MVC

MVC這裡就不多說了,大家都熟悉的不能再熟悉了,比較古老的架構了,相信大家也都使用過;

MVC具體使用

  • Model:資料模型,JavaBean

  • View:layout布局檔案

  • Control:Activity,處理資料請求,商務邏輯

MVC的詬病

  • View和Control耦合嚴重,Activity中存在大量的邏輯代碼,Activity既是View,又是Control,結構不清晰,Activity中內容太多

 

MVP

MVP是在MVC的基礎上把Control獨立出來的模型,簡化Control的內容,這裡Presenter充當中間代理的角色,view和Model不直接互動,而是通過Presenter

MVP的具體使用

  • Model:實體模型,JavaBean

  • View:Activity和Layout

  • Presenter:View和Model通過Presenter互動

MVP的詬病

  • 粒度很難把握,使用過MVP的都知道,MVP模型需要定義比較多的介面,View需要定義介面,presenter需要定義介面,以前我們使用一個activty能解決的問題,現在要將一個Activity分解成一個View,一個Preseter,一個Model,每個模組都需要使用介面來實現解耦,這樣就會導致有時候一個activity中涉及的業務比較多,按每個業務點搭建MVP模型的話,會導致原來一個Activity類能搞定的,現在需要擴充成多個介面,多個類才能實現;粒度大的話,可能結構不清晰;粒度小的話,代碼量又會比較大;

  • MVP是以UI和事件為驅動的模型,資料的擷取是被動的根據UI變動的,我們更希望是資料變化去更新UI,而不是反過來;

  • Presenter和View耦合度比較高;

  • Presenter類在業務比較複雜情況下,代碼量比較大;

 

MVVM

MVVM是在MVP的基礎上,根據Google提出的DateBinding方案重新設計的一個靈活高效的架構,MVVM使用ViewModel一層代替原來的Presenter層;

MVVM的使用

  • Model:資料模型,JavaBean

  • View:Activty和Layout

  • ViewModel:View和Model商務邏輯互動

MVVM的優點

資料驅動

在MVVM中,資料的變化可以自動更新view,不需要擷取view的引用;

耦合較低

MVP模式中View和Presenter是強耦合的,Presenter需要拿到View的引用,這樣當View變動時,Presenter也需要變化,耦合度太高;現在MVVM中,ViewModel只負責資料和業務,View的變化,ViewModel不需要關係,資料變化,View自動更新,耦合度比較低;

View更新

MVVM模型中不用考慮是否在主線程中更新UI,DateBinding會負責在主線程中更新UI的,我們不用擔心線程的問題,簡單的不止一點點;

可重複利用

一個ViewModel就是一個資料來源,可以將一個ViewModel綁定到不同的View中,就可以達到更新view目的

MVVM的詬病

  • MVVM由於是基於google的DataBinding架構的,而DataBinding支援的綁定View還比較少,因此在使用的過程中可能會遇到某些view無法使用DateBinding的情況,這點也是我之前沒有使用MVVM的原因

  • 既然存在上面的問題,國內外的大牛已經幫我們封裝好了一套使用dateBinding的view庫,為避免重複造輪子,我們可以將它引入到我們的項目中直接使用,目前我知道的已經支援常用所有View;

總結

經過上面對不同架構的對比,相信大家都有一個基本的瞭解,有人會問這麼多架構,我們使用那個比較好呢?

個人覺得,技術是在不斷進步,舊的架構最終都會被新的架構所代替,我覺得MVVM的提出解決了我們使用其他架構的很多痛點,我覺得使用MVVM會更好點。

Android 設計模式對比

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.