精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

女性生殖扒开酷刑vk| 日韩hmxxxx| www.99re6| 欧美精品影院| 亚洲午夜免费电影| 欧美日韩在线不卡一区| 亚洲天堂视频在线| 在线国产欧美| 亚洲欧美国产精品专区久久| 亚洲精品综合在线观看| 岛国毛片av在线| 国产成人在线视频网址| 国产91在线高潮白浆在线观看| 国产又黄又粗又猛又爽的| 成人免费直播在线| 欧美色男人天堂| 欧洲精品在线播放| 福利视频在线播放| 岛国精品在线观看| 国产精品日韩精品| 中国一级特黄毛片| 忘忧草精品久久久久久久高清| 亚洲第一中文字幕| 久久久久久综合网| 日韩成人影音| 性做久久久久久久久| 一区二区三区国| 欧美女v视频| 国产在线精品免费av| 欧美在线视频观看| 九九视频免费在线观看| 成人激情视频| 亚洲欧美日韩一区在线| 国产伦精品一区二区三区88av| 成人四虎影院| 色综合激情久久| 国产一区二区视频播放| av免费网站在线观看| 国产蜜臀av在线一区二区三区| 成人欧美一区二区三区在线观看| 在线视频欧美亚洲| 日韩电影在线观看电影| 2018日韩中文字幕| 久久久全国免费视频| 国产精品精品国产一区二区| 亚洲午夜精品久久久久久性色| 性欧美丰满熟妇xxxx性久久久| 亚洲一二三区视频| 91精品国产丝袜白色高跟鞋| 亚欧激情乱码久久久久久久久| 欧美福利在线播放| 欧美午夜无遮挡| 无码aⅴ精品一区二区三区浪潮 | 久久人人爽人人爽爽久久| 久久久久无码精品国产sm果冻 | 清纯粉嫩极品夜夜嗨av| 久久久久久免费视频| 日韩视频在线免费观看| 波多野结衣欲乱| 久久久久午夜电影| 久久精品成人一区二区三区| 一区二区三区四区五区| 亚洲第一偷拍| 九色精品美女在线| 国产精品2020| 国产欧美日韩亚洲一区二区三区| 97精品一区二区三区| 日韩精品1区2区| 美女诱惑黄网站一区| 国产成人精品综合| 在线观看毛片av| 精品亚洲成av人在线观看| 91久久精品国产91性色| www黄色网址| 暴力调教一区二区三区| 久久久99爱| 韩日在线视频| 最好看的中文字幕久久| 国产精品igao激情视频| www成人免费观看| 欧美性20hd另类| 蜜臀av免费观看| 日韩精品一级| 国产视频久久久久| 国产黄色片在线| 欧美精品aa| 18久久久久久| 国产精品呻吟久久| 盗摄精品av一区二区三区| 久久涩涩网站| 嫩草在线视频| 天天色天天操综合| www.日本一区| 国产一级成人av| 伊人久久综合97精品| 欧美第一页在线观看| 日韩视频一区二区三区在线播放免费观看| 日韩美女在线观看| 国产丰满果冻videossex| av亚洲精华国产精华| 亚洲电影网站| 91在线三级| 欧美日韩一区精品| 中国极品少妇videossexhd| 久久香蕉精品视频| 日本三级视频在线观看| 亚洲精品伦理在线| 无码人妻丰满熟妇区毛片18| 欧美一级网址| 日韩高清免费观看| 国产一区二区播放| 久久只有精品| 国产精品夜夜夜一区二区三区尤| 国产高清免费av在线| 亚洲国产日韩综合久久精品| 午夜免费福利在线| 欧美电影在线观看免费| 久久精品国亚洲| 国产亚洲欧美在线精品| 国产成人在线电影| 亚洲一区二区在线免费观看| mm视频在线视频| 日韩一区二区三区四区五区六区 | 亚洲天堂免费av| 久久影音资源网| 国产高清www| 最新亚洲国产| 搡老女人一区二区三区视频tv | 欧美日韩电影在线播放| 在线免费观看成年人视频| 欧美区国产区| 成人黄色av免费在线观看| 蜜桃成人在线视频| 狠狠做深爱婷婷久久综合一区| 日本成人在线免费| 亚洲男女av一区二区| 国产精品欧美激情在线播放| 免费理论片在线观看播放老| 婷婷国产在线综合| 国产精品久久久久久在线观看| 亚洲视频在线免费| 成人免费自拍视频| 91精品国产一区二区三区动漫| 99热这里只有精品免费| wwwav在线| 欧美久久一区二区| jizzjizzjizz国产| 喷水一区二区三区| 神马影院午夜我不卡| 欧美日韩国产v| 亚洲另类欧美自拍| 日韩中文字幕在线观看视频| 91美女在线视频| 欧美黄色免费影院| 免费短视频成人日韩| 青青草国产精品一区二区| 日韩欧美在线观看一区二区| 精品日韩视频在线观看| 欧美成人三级伦在线观看| 中文字幕一区二区精品区| 亚洲一区二区日本| 人人超在线公开视频| 精品国内片67194| 日本熟妇色xxxxx日本免费看| av中文字幕亚洲| 精品99在线视频| 成人看的羞羞网站| 91久久精品美女| 久久不射影院| 精品中文字幕久久久久久| 午夜影院免费在线观看| 国产三级久久久| 国产一级片自拍| 欧美精品1区| 精品一区二区久久久久久久网站| 天堂√中文最新版在线| 怡红院精品视频| 国产精品久久久久毛片| 亚洲一区二区综合| 欧美 日本 国产| 麻豆精品一区二区三区| 中国一级大黄大黄大色毛片| 狠狠一区二区三区| 国产91九色视频| 黄色一级大片在线免费看产| 精品国产伦理网| 国产精品久久久久久久妇| 国产婷婷色一区二区三区在线| 手机视频在线观看| 欧美午夜影院| 日韩高清在线播放| 日韩08精品| 4438全国成人免费| 欧美尤物美女在线| 亚洲国产精品小视频| 国产成人自拍偷拍| 亚洲精品成人少妇| 美女被到爽高潮视频| 国产在线观看免费一区| 欧美极品欧美精品欧美| 日韩综合精品| 国语精品中文字幕| 伊人亚洲精品| 日本亚洲欧美成人| h片在线观看网站| 国产丝袜一区二区三区免费视频| 92久久精品一区二区| 欧美日韩性生活视频| 乱老熟女一区二区三区| 99在线精品一区二区三区| 天天操,天天操| 在线亚洲自拍| 午夜探花在线观看| 国产成人黄色| 国产尤物99| 亚洲午夜国产成人| 国产91精品网站| 春色校园综合激情亚洲| 美女av一区二区| 阿v免费在线观看| 亚洲精品国产精品自产a区红杏吧| 在线观看亚洲国产| 色综合天天性综合| 国产无遮挡aaa片爽爽| 中文字幕一区二区在线观看| 亚洲AV无码国产精品| 成人一级片在线观看| 中文字幕丰满乱码| 男人的天堂久久精品| 精品国产免费av| 国色天香一区二区| 中文字幕乱码免费| 在线中文字幕亚洲| 亚洲精品中文综合第一页| 亚洲成人一品| 精品中文字幕人| 成人香蕉社区| 国产精品中出一区二区三区| 欧美久久亚洲| 91观看网站| 玖玖精品一区| 亚洲aa中文字幕| 成人国产精品一区二区网站| 国产精品亚洲欧美导航| 成人不卡视频| 国产精品激情av电影在线观看| 在线成人av观看| 91成人免费观看网站| 国产嫩草在线视频| 欧美劲爆第一页| 丁香影院在线| 91国内产香蕉| 日韩精品极品| 欧美在线观看一区二区三区| 精精国产xxxx视频在线播放| 18一19gay欧美视频网站| 亚洲天堂资源| 国产成人一区二区三区电影| 日韩免费福利视频| 国产精品电影久久久久电影网| 中文字幕系列一区| 国产免费一区二区三区香蕉精| 日韩精品影院| 国产日韩欧美视频| 日韩成人在线看| 国产一区二区高清视频| 西野翔中文久久精品国产| 久久久久久久有限公司| 精品国产91久久久久久浪潮蜜月| 四虎一区二区| 图片区亚洲欧美小说区| 免费网站在线观看视频| 亚洲三级色网| 亚洲中文字幕久久精品无码喷水| 日本不卡在线视频| 久久精品国产99久久99久久久| 国产二区国产一区在线观看| 亚洲一区二区在线免费| 国产亚洲欧美日韩在线一区| 国产白丝一区二区三区 | 精品国偷自产国产一区| 瑟瑟在线观看| 日韩在线视频一区| 爱搞国产精品| 国产精品美女久久久久久免费 | 亚洲福利在线播放| 国产理论电影在线观看| 久久精品视频亚洲| h片在线观看视频免费| 国产精品成人v| 一区二区三区在线资源| 欧美极品视频一区二区三区| 色婷婷综合网| 日本xxxxxxxxxx75| 蜜臂av日日欢夜夜爽一区| 日本精品一二三区| 欧美激情中文字幕一区二区| 欧美激情精品久久| 一本久久精品一区二区| 国产成人精品亚洲精品色欲| 亚洲精品永久免费精品| 黄色在线播放网站| 国产成人精品日本亚洲专区61| 精品久久亚洲| 日韩偷拍一区二区| 黄色免费成人| 午夜剧场在线免费观看| 91一区二区三区在线观看| www.99re6| 色婷婷av一区二区三区之一色屋| av天堂一区二区三区| 国产一区二区三区网站| 不卡av免费观看| 成人一区二区电影| 国产一区二区观看| 国产日韩欧美精品在线观看| 久久激情五月婷婷| 精品国产无码在线观看| 亚洲成人黄色影院| 国产喷水福利在线视频| 亚洲最新av在线| 亚洲欧美小说色综合小说一区| y111111国产精品久久婷婷| 日韩精品电影| 日本成人中文字幕在线| 99国产精品久久久久久久久久| 国内偷拍精品视频| 欧美顶级少妇做爰| av中文在线| 国产精品第一区| 少妇精品久久久一区二区| 97超级碰碰碰久久久| 欧美色图17p| 精品成人在线视频| 亚洲国产精品久久久久久6q| 久久视频在线播放| 日韩毛片免费看| 亚洲自拍三区| 久久机这里只有精品| jizzjizzjizz国产| 欧美日韩高清一区二区三区| 高清美女视频一区| 国产成人91久久精品| 亚洲男人都懂第一日本| 国内外成人免费激情视频| a亚洲天堂av| 免费在线观看黄网站| 亚洲第一福利视频| 国产在线天堂www网在线观看| 超碰在线97av| 伊人久久成人| 亚洲最大的黄色网| 天天色图综合网| 欧美日韩视频精品二区| 国产精品69精品一区二区三区| 一本色道久久综合狠狠躁的番外| www.浪潮av.com| 2024国产精品| 伊人成年综合网| 在线播放国产一区二区三区| 欧美亚洲大片| 最新精品视频| 国产传媒日韩欧美成人| 素人fc2av清纯18岁| 91福利小视频| 蜜芽在线免费观看| 99在线影院| 亚洲精品麻豆| 国产精品成人一区二区三区电影毛片 | 欧美在线观看一区| 免费人成在线观看播放视频| 91gao视频| 99精品国产福利在线观看免费| 亚洲AV无码国产精品| 欧美日韩一区二区三区不卡| 黄色成人在线观看| 国产精品久久久久免费 | 亚洲精品永久视频| 一区二区三区日韩在线观看| 日本免费不卡视频| 日韩av男人的天堂| 88国产精品视频一区二区三区| 亚洲黄色小说在线观看| 日韩欧美在线国产| 黄色免费在线网站| 国产综合欧美在线看| 日本视频一区二区| 精品少妇久久久| 亚洲日本成人网| 国产麻豆精品| 日韩精品一区二区三区久久| 亚洲欧美福利一区二区| 香港三日本三级少妇66| 国产日韩亚洲欧美| 在线播放日韩| 北条麻妃在线观看视频| 欧美精品一区二| 四虎影视成人精品国库在线观看 | 精品少妇一区二区三区日产乱码| 伊人久久视频|