精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

我的Android重構之旅:架構篇

移動開發(fā) Android
在這一篇中,我將依次的和大家介紹一下 MVVM、MVP、MVC、AndroidFlux 這幾種主流的架構設計,本文中不會很深入的分析這些架構的代碼上有何區(qū)別,只是將它們的設計思路帶給大家,讓大家更方便的選擇在項目適用的架構。
  • 去年10月底來到了新公司,剛開始接手 Android 項目時,發(fā)現該項目真的是一團遭,項目開發(fā)上沒有任何架構可言,開發(fā)人員連簡單的 MVC、MVP 都不了解,Activity 及其臃腫,業(yè)務邊界也不明確,因此我決定重新分析一下當前主流的幾種開發(fā)架構,選出適合當前項目的架構形式。

這是“我的Android重構之旅”的開篇之章,在這一篇中,我將依次的和大家介紹一下 MVVM、MVP、MVC、AndroidFlux 這幾種主流的架構設計,本文中不會很深入的分析這些架構的代碼上有何區(qū)別,只是將它們的設計思路帶給大家,讓大家更方便的選擇在項目適用的架構。

MVC

MVC 簡單來說就是將整個應用分為 Model、View 和 Controller 三個部分

  • 視圖(View):管理作為位圖展示到屏幕上的圖形和文字輸出。
  • 控制器(Controller):翻譯用戶的輸入并依照用戶的輸入操作模型和視圖。
  • 模型(Model):管理應用的行為和數據,響應數據請求(經常來自視圖)和更新狀態(tài)的指令(經常來自控制器)。

 

我的Android重構之旅:架構篇

MVC 架構

從上圖可以看出來 View 層需要由 Controller 發(fā)起事件通知 View 然后 View 從 Model 獲取數據,這在 APP 中是較難實現的,我們的事件往往是由 Activity 或 View 發(fā)起并主導的,如果將事件的發(fā)起與控制權交由 Controller 處理的話經常會出現一些意想不到的問題,如內存泄漏等,這就導致了 MVC 的變種 MVP 的出現,Android 本身的設計還是符合 MVC 架構的,但是 Android 中純粹作為 View 的 XML 視圖功能太弱,我們大量處理 View 的邏輯只能寫在 Activity 中,這樣 Activity 就充當了 View 和 Controller 兩個角色,直接導致 Activity 中的代碼大爆炸。相信大多數 Android 開發(fā)者都遇到過一個 Acitivty 數以千行的代碼情況吧!所以,更貼切的說法是,這個 MVC 結構最終其實只是一個 Model-View(Activity:View&Controller)的結構。

MVP

MVP 架構模式是 MVC 的一個變種,很多框架都自稱遵循 MVC 架構模式,但是它們實際上卻實現了 MVP 模式。MVC 與 MVP 之間的區(qū)別其實并不明顯,我認為倆者之間的最大區(qū)別就是 View 層可以發(fā)起事件。

 

我的Android重構之旅:架構篇

MVC 架構

在 MVP 中,Presenter 可以理解為松散的控制器,其中包含了視圖的 UI 業(yè)務邏輯,所有從視圖發(fā)出的事件,都會通過代理給 Presenter 進行處理,同時,Presenter 也通過視圖暴露的接口與其進行通信。

 

我的Android重構之旅:架構篇

APP 中的應用

在 MVC 中,控制器負責以不同的視圖響應客戶端請求的不同動作,然而,不同于 MVC 模式,MVP 中視圖將所有的動作交給 Presenter 進行處理,MVC 中的所有的動作都對應著一個控制器的方法調用,Web 應用中的每一個動作都是對某一個 URL 進行的操作,控制器根據訪問的路由和方法(GET 等)對數據進行操作,最終選擇正確的視圖進行返回。

MVC 中控制器返回的視圖沒有直接綁定到模型上,它僅僅被控制器渲染并且是完全無狀態(tài)的,其中不包含任何的邏輯,但是 MVP 中的視圖必須要將對應的事件代理給 Presenter 執(zhí)行,否則事件就無法被響應。

上述內容取自 What are MVP and MVC and what is the difference? · Stack Overflow 中的 Model-View-Controller 部分。

從這里可以看出,Presenter 層的出現幫助我們減輕了 Activity 的壓力,結構上也較為清晰,但是 View 層將存在較多與 Presenter 溝通的代碼這是我們較為不希望看到的結果,MVVM 架構在這種情況下被提了出來。

MVVM

MVVM 架構模式是微軟在 2005 年誕生的,第一次進入 Android 人員視野是從 Google 2015 推出 DataBinding 組建開始,后續(xù) Google 不斷的推出了 ViewModels、LiveData、Android Loader、Lifecycles 等適用于 MVVM 架構的組件,由此可見 Google 已經“欽定” MVVM 是 Android 開發(fā)未來的第一架構了。

 

我的Android重構之旅:架構篇

MVVM 架構

從 Model-View-ViewModel 這個名字來看,它由三個部分組成,也就是 Model、View 和 ViewModel,其中視圖模型(ViewModel)其實就是 PM 模式中的展示模型,在 MVVM 中叫做視圖模型。

除了我們非常熟悉的 Model、View 和 ViewModel 這三個部分,在 MVVM 的實現中,還引入了隱式的一個 Binder 層,而聲明式的數據和命令的綁定在 MVVM 模式中就是通過它完成的。

 

我的Android重構之旅:架構篇

Binder 層

MVVM 架構將 Presenter 改名為 ViewModel,基本上與 MVP 模式完全一致,唯一的區(qū)別是,它采用雙向綁定(data-binding)View的變動,自動反映在 ViewModel,反之亦然,這就導致了我們如果要完整的采用 MVVM 必須熟練的掌握 DataBinding 等基礎組建,這就給我們將 MVVM 引入項目帶了困難。

AndroidFlux

AndroidFlux 是 Facebook 的 Flux 架構的 Android 實現。 Flux 是 Facebook 在14年提出的一種 Web 前端架構,主要用來處理復雜的 UI 邏輯的一致性問題(當時是為了解決 Web 頁面的消息通知問題)。經過實踐之后發(fā)現,這種架構可以很好的應用于 Android 平臺,相對于其他的 MVC/MVP/MVVM 等模式,擁有良好的文檔和更具體的設計,比較適合于快速開發(fā)實現。

Flux 模式最大的特點是單向的數據流,它的 UI 狀態(tài)更新模式繼承了 MVC 模式的設計思想。 Flux 并不是具體的框架,而是一套處理 UI 問題的模式, AndroidFlux 同樣不是具體的框架,你不需要導入或者集成任何新的代碼就可以使用,而你需要做的事情是了解這套思想、遵循這種開發(fā)模式。

 

我的Android重構之旅:架構篇

AndroidFlux 架構

上述內容取自 AndroidFlux QUICK START。

AndroidFlux 的結構設計很容易讓我們想到函數式響應編程(functional-reactive-programming),而且 AndroidFlux 一直在強調它自己本身并非某種具體的框架而是一種 UI 或者說數據流的走向,這個很像我們熟知的 RxJava 設計思路,所有事件、UI 都可以當作為一個數據流并加以處理。

 

我的Android重構之旅:架構篇

AndroidFlux 的數據流動

只有一個Dispatcher

在 AndroidFlux 應用中 Dispatcher 是中心樞紐,管理所有的數據流。它實際上管理的是 Store 注冊的一系列回調接口,本身沒有其他邏輯 —— 它僅僅是用來把 Action 發(fā)送到各個 Store 的一套簡單的機制。每個 Store 都會把自己注冊到這里,并提供自己的回調方法。當 ActionCreato 給 Dispatcher 傳遞一個 Action 的時候,應用中所有的 Store 都會通過回調接口收到通知。

隨著 App 的增長,Dispatcher 會變得更加重要,它可以通過調整回調方法的觸發(fā)次序來管理 Store 之間的依賴關系。Store 可以聲明等待其他 Store 更新完畢再更新自己。

Stores

Store 包含應用的狀態(tài)(State)和邏輯(Logic)。它扮演的角色和 MVC 模式中的 Model 類似,但是它會管理多個對象的狀態(tài) —— 它不是像 ORM-Model 一樣的單獨的數據集。Store 負責管理App中一片區(qū)域(Domain)的狀態(tài),而不是簡單的ORM數據集。

由于 AndroidFlux 是一串的語法、結構規(guī)范,他并沒有什么組件來協助我們開發(fā),所以使用 AndroidFlux 的難度較高,暫時不考慮在中、小型團隊中的應用,僅僅作為一個知識拓展。

總結

在架構模式的選用時,我們往往沒有太多的發(fā)言權,主要因為平臺本身往往對應用層有著自己的設計,我們在開發(fā)客戶端或者前端應用時,只需要遵循平臺固有的設計就可以完成應用的開發(fā),不過,在有些時候,由于工程變得龐大、業(yè)務邏輯變得異常復雜,我們也可以考慮在原有的架構之上實現一個新的架構以滿足工程上的需要。

最終由于項目上人手不足,我們的項目很遺憾只能選擇 MVP 進行重構,但是其他的架構也給我們提供了不錯的思路如 MVVM 架構中 Google 官方提供的綁定組件,AndroidFlux 將 UI 作為響應式編程的一部分,這些好的地方都值得我們去反復揣摩深入學習,后續(xù)的文章將會陸續(xù)的和大家一起討論一下我們在項目重構中經歷過的一些問題,以及我們是如何設計出一個相對簡單易用的通用開發(fā)架構。

責任編輯:未麗燕 來源: 簡書
相關推薦

2018-07-17 15:11:27

Android重構插件化

2011-05-31 08:54:37

Android開發(fā) 架構

2011-07-29 09:56:23

2023-09-26 21:55:29

2021-07-12 07:31:22

重構軟件行業(yè)

2024-06-26 18:58:30

游戲MQ重構

2024-09-27 12:04:48

2016-05-24 10:40:32

NodeJS總結

2024-11-08 09:19:28

2012-05-08 16:40:36

Android

2011-06-07 16:47:28

Android 重構

2009-07-06 10:42:05

2020-06-17 16:38:22

Rust業(yè)務架構

2021-07-08 06:08:54

架構重構開發(fā)

2011-10-31 10:32:14

OpenStack

2017-08-08 16:07:57

Android 模塊化架構

2017-08-11 16:10:36

微信Android實踐

2020-11-02 12:49:16

重構核心系統

2022-08-08 13:24:28

整潔架構架構前端

2023-01-05 13:09:48

OKR項目管理
點贊
收藏

51CTO技術棧公眾號

国产精品久久一区主播| 日韩欧美一级片| 日韩av电影免费在线| 成人黄色片在线观看 | 久久综合久久八八| 国模大尺度视频| 亚洲私拍视频| 国产精品国产三级国产| 亚洲直播在线一区| 国产精品男女视频| 无需播放器亚洲| 亚洲国产欧美一区| 亚洲图片 自拍偷拍| 日本不卡1234视频| 97超碰在线资源| 精品一区二区三区免费看| 欧美香蕉大胸在线视频观看| 午夜在线视频免费观看| 四虎影视在线观看2413| 另类小说视频一区二区| 欧美一级片免费在线| 我要看黄色一级片| 老牛影视av一区二区在线观看| 中文字幕人成不卡一区| 久久国产精品久久| 国产肥老妇视频| 日本美女一区二区三区| 久久频这里精品99香蕉| 黄视频网站免费看| 成人综合久久| 亚洲欧美日韩爽爽影院| 老司机午夜免费福利| 久久精品免视看国产成人| 在线一区二区三区四区| 久久99中文字幕| av网站在线免费| 国产精品婷婷午夜在线观看| 欧美第一黄网| 国产综合在线播放| 国产高清成人在线| 成人黄色网免费| 91黑人精品一区二区三区| 亚洲欧洲一区| 国语自产精品视频在线看抢先版图片| 影音先锋黄色资源| 在线综合色站| 91精品免费在线| 午夜视频在线网站| 久久野战av| 91福利在线观看| 妓院一钑片免看黄大片| 日本美女一区| 日本韩国精品一区二区在线观看| 日本特级黄色大片| 毛片av在线| 亚洲欧洲成人av每日更新| 中文字幕中文字幕在线中心一区| 国产高清在线免费| 美女mm1313爽爽久久久蜜臀| 国产精品欧美激情在线播放| 中文区中文字幕免费看| 蜜臀a∨国产成人精品| 国产精品网址在线| 国产精品一二三四五区| 激情都市一区二区| 97欧洲一区二区精品免费| 亚洲国产精品国自产拍久久| 成人深夜福利app| 九九九热999| 黄色小视频在线免费观看| 国产欧美精品国产国产专区| 亚洲精品不卡| 国产写真视频在线观看| 亚洲香肠在线观看| 99精品在线免费视频| 午夜av成人| 91精品国产入口| 国产精品一区二区无码对白| 日韩电影不卡一区| 原创国产精品91| 中文字幕av免费在线观看| 亚洲激情成人| 国产99视频在线观看| 国产又粗又猛视频| 国产成人精品一区二区三区四区| 国产精品女人网站| 性生交生活影碟片| 久久久久久久综合| 色香蕉在线观看| 国产无遮挡裸体视频在线观看| 亚洲三级在线看| 韩国无码av片在线观看网站| 日本不卡1234视频| 宅男在线国产精品| 久久人人爽人人爽人人片| 日韩美女一区二区三区在线观看| 亚洲图片欧美日产| 18性欧美xxxⅹ性满足| 中文字幕一二三区| 欧美日韩xxxx| 九九热精品在线| 亚洲大尺度在线观看| 国产精品456露脸| 欧美一级片免费观看| 天堂av资源在线观看| 色综合激情五月| 国产精品嫩草69影院| 欧美综合精品| 九九久久国产精品| 中文字幕理论片| www.99精品| 日本女人高潮视频| 成人免费av电影| 亚洲精品久久久久| 欧美黑人性猛交xxx| 日韩电影一区二区三区四区| 99se婷婷在线视频观看| av福利精品| 色综合久久中文字幕| 国产综合内射日韩久| 亚洲精品91| 国产精品视频播放| 精品电影在线| 午夜伊人狠狠久久| 亚洲成a人无码| 一本一道久久综合狠狠老| 国产精品白丝jk喷水视频一区| 无码视频在线观看| 97久久人人超碰| 奇米777四色影视在线看| 国产a亚洲精品| 亚洲人午夜精品| a v视频在线观看| 无套内谢的新婚少妇国语播放| 一本到12不卡视频在线dvd| 欧美综合激情网| 午夜视频1000| 亚洲成人你懂的| 日本不卡视频一区| 在线高清一区| 国产精品伊人日日| 久久香蕉av| 精品国产乱码久久久久久牛牛| 色欲av无码一区二区三区| 伊人成人在线视频| 国产成人精品免费视频大全最热| 黄频网站在线观看| 亚洲一区二区影院| 岛国av免费观看| 国精品一区二区三区| 国产伦精品一区二区三区高清| 欧洲亚洲在线| 色94色欧美sute亚洲线路一久| 日本中文字幕影院| 五月婷婷亚洲| 91久久久在线| 欧洲在线视频| 精品久久人人做人人爰| 日本熟妇成熟毛茸茸| www.亚洲色图| 久久国产乱子伦免费精品| 久久av免费看| 国产精品美女视频网站| 日韩伦理在线电影| 欧美一区二区精品在线| 欧美黄色一级网站| 99re8在线精品视频免费播放| 亚洲一二三区在线| 国产精区一区二区| 欧美激情视频免费观看| 日本私人网站在线观看| 在线精品视频一区二区三四 | 免费看精品久久片| 夜夜春亚洲嫩草影视日日摸夜夜添夜| √天堂8资源中文在线| 欧美变态tickle挠乳网站| 日韩免费不卡视频| 国产偷国产偷精品高清尤物| 在线观看高清免费视频| 综合精品久久| 九色综合日本| 亚洲欧洲日韩精品在线| 欧美丰满少妇xxxx| 国产精品二区三区四区| 蜜桃视频在线免费| 欧美日韩国产首页| 国产精品二区一区二区aⅴ| 久久久久亚洲综合| 国产欧美精品一二三| 尤物精品在线| 亚洲欧美日韩精品久久久| 一区二区三区四区精品视频| 日本韩国在线不卡| 宅男在线观看免费高清网站| 亚洲精品按摩视频| 96日本xxxxxⅹxxx17| 偷拍与自拍一区| 亚洲AV成人无码精电影在线| 91丝袜美腿高跟国产极品老师| 99久久久无码国产精品性色戒| 国产伦精品一区二区三区视频金莲| 精品免费日韩av| 国产成人麻豆免费观看| 一区二区三区在线免费视频| 黄色短视频在线观看| 国产综合久久久久影院| 哪个网站能看毛片| 影音先锋中文字幕一区二区| 一区二区在线中文字幕电影视频| 欧美一级做一级爱a做片性| 午夜精品在线视频| 91精品久久| 中文字幕亚洲专区| 香蕉视频黄在线观看| 日韩一区二区免费在线观看| 无码aⅴ精品一区二区三区| 一区二区三区四区高清精品免费观看| 久久久久久无码精品人妻一区二区| 香蕉av一区二区| 日产精品高清视频免费| 91国内精品| 亚洲一区二区三区乱码aⅴ蜜桃女| 综合久久2o19| 日韩在线观看免费网站 | 一级在线观看视频| av资源网一区| 日本wwwwwww| 九一久久久久久| 一区二区三区入口| 美女尤物久久精品| 亚洲熟妇av日韩熟妇在线| 欧美精品18| 日本黄网站色大片免费观看| 日韩久久精品| 亚洲v国产v在线观看| 国产乱码精品一区二区三区四区| 成人在线播放av| yw.尤物在线精品视频| 69av在线视频| 麻豆视频在线观看免费网站黄| 中文字幕亚洲字幕| 精品av中文字幕在线毛片| 亚洲欧美日韩精品久久奇米色影视| 国产精品永久久久久久久久久| 亚洲夂夂婷婷色拍ww47| 黄色一级视频免费| 一区二区三区四区高清精品免费观看 | 日韩免费av一区| 国产精品久久久久久亚洲伦| 国产aaaaaaaaa| 国产精品国产自产拍在线| 人成免费在线视频| 中文字幕在线免费不卡| 超碰人人人人人人人| 国产精品福利电影一区二区三区四区| 人妻激情偷乱频一区二区三区| 日韩在线一二三区| 亚洲高清在线免费观看| 美女视频一区二区三区| 五月六月丁香婷婷| 国产·精品毛片| a级片在线观看视频| 97se亚洲国产综合自在线不卡 | 97精品一区二区三区| 黄色网址在线免费观看| 不卡av在线播放| 2020日本在线视频中文字幕| 9.1国产丝袜在线观看| av高清一区| 成人羞羞国产免费| 国产成人在线中文字幕| 久久久久久亚洲精品不卡4k岛国 | 国产911在线观看| 欧美三级特黄| 国产最新免费视频| 美国三级日本三级久久99| 善良的小姨在线| av男人天堂一区| 亚洲一级片在线播放| 亚洲欧美日韩国产另类专区| 日本五十路女优| 欧美综合一区二区| 性一交一乱一乱一视频| 亚洲美女在线视频| 国产日产一区二区| 91精品国产沙发| 日韩电影精品| 超碰在线97av| 国产精品欧美日韩一区| 日韩video| 久久www成人_看片免费不卡| 中文字幕线观看| 26uuu精品一区二区三区四区在线| 国产伦精品一区三区精东| 久久精品欧美一区二区三区不卡 | 国产精品亚洲a| 久久国产婷婷国产香蕉| 国产精品一区二区无码对白| 国产精品久久久久久久久免费樱桃| 91l九色lporny| 洋洋成人永久网站入口| 中文字幕有码视频| 亚洲国产精品成人av| 欧美日韩xx| 亲子乱一区二区三区电影| 亚洲不卡视频| 亚洲精品高清国产一线久久| 一本色道88久久加勒比精品| 国内国产精品天干天干| 久久九九影视网| 久久久久久久久艹| 欧美精品日韩综合在线| 毛片网站在线观看| 97久久精品国产| 日韩一二三区| 宅男在线精品国产免费观看| 久久不射2019中文字幕| 亚洲高清无码久久| 一区二区三区av电影 | 影音先锋中文字幕一区| 国产又大又黄又猛| 久久九九99视频| 日本在线播放视频| 亚洲成人黄色网址| 人人超在线公开视频| 成人精品视频在线| 青青草原综合久久大伊人精品 | 国产精品美女诱惑| 久久伦理在线| 天堂中文视频在线| 久久亚洲精品国产精品紫薇| 久久亚洲AV无码| 日韩欧美另类在线| av免费在线免费观看| 亚洲一区二区日本| 亚洲理论电影网| 特级黄色片视频| 亚洲人精品一区| 国产欧美久久久| 久久伊人精品一区二区三区| 人人玩人人添人人澡欧美| 一区二区三区四区国产| 麻豆免费精品视频| 亚洲av无一区二区三区| 777午夜精品视频在线播放| 在线观看av黄网站永久| 国产精品小说在线| 国产精品成人a在线观看| 亚洲精品综合在线观看| 亚洲欧美在线观看| av 一区二区三区| 欧美日产国产成人免费图片| 无码国模国产在线观看| 国产一区二区三区小说| 北条麻妃国产九九精品视频| 日韩精品久久久久久久酒店| 亚洲精品久久久久久久久| 在线免费三级电影网站| 日本一区二区免费看| 久久国产精品72免费观看| 欧美日韩黄色网| 日韩欧美一区在线观看| 成av人片在线观看www| 久久精品二区| 日韩成人精品在线| 波多野结衣久久久久| 日韩精品一区二区三区视频| 国产中文在线播放| 日本不卡一区二区三区视频| 蜜桃视频一区二区三区| 日韩成人毛片视频| 亚洲经典中文字幕| 亚洲日本在线观看视频| 中文一区一区三区免费| 国产精品69毛片高清亚洲| 波多野结衣国产| 色诱女教师一区二区三区| 五月亚洲婷婷| 丁香啪啪综合成人亚洲| 综合激情成人伊人| 亚洲 另类 春色 国产| 国产精品一香蕉国产线看观看| 日韩a级大片| 国产一二三区av| 亚洲影院理伦片| 欧洲亚洲在线| 91麻豆蜜桃| 日韩国产在线观看一区| 青青草手机视频在线观看| 亚洲精品日韩久久久| 亚洲欧美久久精品| 久久久亚洲精品无码| 中文字幕一区二区三区精华液| 国产一级片一区二区| 欧美裸体xxxx极品少妇| 国产亚洲一区| 黑人玩弄人妻一区二区三区| 欧美性受xxxx黑人xyx性爽| 免费在线观看的电影网站| 亚洲 国产 欧美一区|