国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

MVVM架構在Android開發(fā)中的應用

2020-11-24 17:40潘鳳江蘇聯(lián)合職業(yè)技術學院淮安生物工程分院
數(shù)碼世界 2020年3期
關鍵詞:布局組件界面

潘鳳 江蘇聯(lián)合職業(yè)技術學院淮安生物工程分院

一、引言

從功能手機到智能手機,從3G到4G再到如今的5G,手機中的APP越來越豐富,提供的功能越來越強大,涉及的領域越來越廣。在這背后,離不開移動生態(tài)和APP開發(fā)技術的不斷發(fā)展。在移動端操作系統(tǒng)市場中,Android操作系統(tǒng)占比超過了百分之七十。這幾年來,Android操作系統(tǒng)在不斷地迭代更新,同時,Android應用架構也不斷發(fā)展。最初的一代架構是MVC,但是Activity過于臃腫;為了解決該問題,出現(xiàn)了二代架構MVP,新增了presenter層,作為控制中心,分擔原來Activity中的部分功能,處理View于Model間的交互和業(yè)務邏輯;如今Android主流應用架構是MVVM,MVVM的出現(xiàn)解決了MVP架構中View層大量接口和實現(xiàn)類等問題,更加靈活高效。

二、概述

MVVM架構共分為三層:Model層、View層、ViewModel層。Model表示模型層,主要負責獲取視圖層所需要的數(shù)據(jù),數(shù)據(jù)源通常是網(wǎng)絡和本地數(shù)據(jù)庫。View層是視圖層,主要負責界面的繪制和交互,Android項目的View層通常是XML和Activity;ViewModel層是視圖-模型層,主要負責業(yè)務邏輯的處理,串聯(lián)View層與Model層間,當Model層更改時,ViewModel層反饋給View層,引發(fā)頁面的刷新。Android項目中引入MVVM架構可以帶來以下幾點優(yōu)勢。

1.各層級低耦合

MVVM架構中,數(shù)據(jù)模塊和界面模塊是相互獨立的,通過ViewModel建立關聯(lián)。單純從數(shù)據(jù)的角度來看,Model負責提供數(shù)據(jù),ViewModel負責處理數(shù)據(jù),View負責展示數(shù)據(jù)。View層想展示什么樣的樣式,完全由自己決定。如果View層的樣式發(fā)生變化,只要數(shù)據(jù)格式不變,那么ViewModel層和Model層就不需要做任何改動。如果Model數(shù)據(jù)源發(fā)生了變化,只要數(shù)據(jù)格式不變,那么View層也不需要做任何改動。而在MVC或者MVP架構中,當界面樣式改變時,可能就需要改變獲取控件的方式,改變更新界面的接口等等。

2.雙向綁定、數(shù)據(jù)驅動

在MVVM架構中,可以通過數(shù)據(jù)綁定框架實現(xiàn)數(shù)據(jù)和控件的雙向綁定,當數(shù)據(jù)改變時會自動驅動View層更新,View層控件改變時可以自動反饋到數(shù)據(jù)上,這樣ViewModel層可以專注于處理數(shù)據(jù)和業(yè)務邏輯,不需要去關注View層的邏輯,比如如何獲取用戶的輸入,如何更新界面,如何獲知用戶的交互事件等等。View層和ViewModel層之間通過數(shù)據(jù)進行串聯(lián),一方改變都會自動影響另外一方。每一層只關注自己的事情,整個項目的結構非常清晰明了。

3.團隊協(xié)作,提高效率

在MVVM架構下,各層級之間的耦合程度很低,所以可以根據(jù)層級對整個項目進行劃分,進而明確地分工,這樣極大地提高了個人和整個團隊的開發(fā)效率。

4.可復用性

如果對于同一份數(shù)據(jù),需要多種樣式進行展示,那么同一個ViewModel就可以供多個View使用。如果由于需求的變化導致樣式不斷變化,那么我們只需要更改對應的View層就可以了。

5.易于測試

由于ViewModel層和View層是相互獨立的,一個專注于數(shù)據(jù)和業(yè)務邏輯的處理,一個專注于界面的繪制和交互,那么開發(fā)人員在做單元測試的時候,可以對兩個層級分別進行測試,極大地方便了測試。

6.優(yōu)化代碼

Android中findViewById等模式化代碼無需手動編寫,MVVM中的數(shù)據(jù)綁定框架可以直接完成該工作,極大地提高了工作效率,同時還可以提高XML布局文件的解析速度。

三、應用

2015 年谷歌在Google I/O上提出了Data Binding庫,目的是減少Android開發(fā)中的大量模板代碼(setText等),增加代碼及邏輯清晰度,提高開發(fā)效率和維護效率。同時,這也意味著,在Android開發(fā)中支持MVVM的開發(fā)模式,Data Binding可以使得數(shù)據(jù)對象直接綁定到XML布局文件中,數(shù)據(jù)發(fā)生變化時會直接反映到View上;View狀態(tài)發(fā)生變化時也會反應到數(shù)據(jù)上。Android項目中使用Data Binding搭建MVVM架構,需要以下幾個步驟:

1.利用Data Binding搭建View層。引入Data Binding框架后,XML布局文件和原始文件相比,增加了layout標簽和data標簽。data標簽用來綁定數(shù)據(jù)對象,這樣布局標簽就可以直接使用變量中的屬性。Activity中需要使用Data Binding綁定對應的布局文件和數(shù)據(jù)對象,數(shù)據(jù)對象需要實現(xiàn)Observable接口,這樣數(shù)據(jù)對象就有了更新通知能力,一旦數(shù)據(jù)層的對象發(fā)生變化,View層就會自動完成相應的變化。

2.搭建ViewModel層。ViewModel層主要負責業(yè)務邏輯的處理,持有ObservableField等View層所需要的數(shù)據(jù)對象,還有Model層的對象。通過Model層對象調用接口獲取數(shù)據(jù),獲取數(shù)據(jù)成功后給ObservableField等數(shù)據(jù)對象賦值,一旦數(shù)據(jù)的值發(fā)生變化后,View層對應的頁面就會刷新。

Data Binding搭建的MVVM架構有很多優(yōu)點,比如雙向綁定技術可以讓數(shù)據(jù)的一致性很好、增強了View層和ViewModel層聯(lián)動性、減少了很多模式化代碼、自動判空技術減少了低級錯誤的發(fā)生等等。但是,Data Binding框架也有一些缺陷,首先Data Binding框架對XML布局文件的侵入性比較大,增加了學習成本,同時還影響了XML布局文件的復用性;其次,由于XML布局文件無法進行調試,而數(shù)據(jù)綁定讓一部分邏輯轉移到了XML布局文件中,所以增加了代碼調式的難度,可能會出現(xiàn)BUG定位困難的情況。還有,Data Binding框架是基于數(shù)據(jù)驅動的,當某個模塊的業(yè)務邏輯比較復雜的時候,那么Model層的數(shù)據(jù)往往會比較大。但是數(shù)據(jù)只有在頁面銷毀的時候統(tǒng)一釋放,而不能根據(jù)View的生命周期釋放,所以總的來說,項目占用的內存增大了。

在這之后,谷歌在2017年Google I/O大會上宣布了一個全新的架構組件Android Architecture Components,我們后面簡稱AAC。Google官方對該框架的說明是:這是一個幫助構建穩(wěn)定,易于測試和易于維護的App架構的庫。該框架主要包含ViewModel、LiveData、Room三個核心組件。

1.ViewModel組件

在以往的項目架構中,由于沒有ViewModel這一層,所以相關數(shù)據(jù)都存儲在Activity或者Fragment中,而Activity和Fragment都有自己的生命周期,在特殊的情況下會發(fā)生銷毀或者重新創(chuàng)建,這時候存儲在Activity或者Fragment中的數(shù)據(jù)會隨著頁面的銷毀而消失,雖然Activity 可以使用 onSaveInstanceState方法存儲和恢復相關的數(shù)據(jù),但是這只適用于少量的數(shù)據(jù)。AAC框架中的ViewModel組件很好地解決了這個問題,ViewModel組件旨在以注重生命周期的方式存儲和管理界面相關的數(shù)據(jù),它能夠承擔保存數(shù)據(jù)的責任,把數(shù)據(jù)從界面中分離出來。同時,ViewModel也有自己的生命周期,和Activity、Fragment等組件的生命周期相匹配,這樣當遇到界面銷毀重建的情況時能夠很好地保存數(shù)據(jù),然后及時地恢復到界面上。

2.LiveData 組件

LiveData 能夠感知Activity、Fragment等組件的生命周期。當Activity等組件銷毀時,LiveData也會被退訂,這樣就有效地避免部分內存泄露問題。LiveData組件把View層和ViewModel層串聯(lián)了起來,一旦數(shù)據(jù)發(fā)生了變化,就會通知View層,界面便會做出響應。

3.Room 組件

Room組件是在Android本地數(shù)據(jù)庫基礎上封裝的一個組件,可以提供強大的數(shù)據(jù)庫功能。Room組件在MVVM架構中不是必須的,可以根據(jù)自己項目的需求選擇。

我們利用AAC框架可以很輕松地搭建一個MVVM架構的項目。搭建流程主要是:ViewModel組件作為MVVM架構中的ViewModel層,Activity和XML布局文件作為View層,LiveData作為可觀察的數(shù)據(jù)存儲器類在ViewModel層被創(chuàng)建,在View層中被觀察,從而完成View層和ViewModel層的綁定。對比單純Data Binding框架搭建的MVVM架構,AAC框架更加地完善和合理,對于Android開發(fā)者來說更加地友好。當然,也可以在AAC框架的基礎上結合Data Binding框架,這需要根據(jù)項目的具體情況進行考量。

四、結束

總的來說,架構的引入目的是為了使項目結構更加合理,一個合理的架構可以使項目模塊內部高聚合、模塊之間低耦合。在項目開發(fā)的過程中,可以讓開發(fā)人員只需要專注于某個模塊或者某個業(yè)務,分工更加地合理,極大提高個人開發(fā)效率和團隊的開發(fā)效率。架構的引入往往并不意味著代碼量的減少,甚至可能會使代碼量增多,因為我們引入項目架構的目的是為了項目在邏輯上更簡單,讓整個項目的質量、可擴展性、可維護性等得到提高。MVVM架構的諸多優(yōu)點可以讓項目穩(wěn)健性更強、可測試性更好、可維護性更高。

猜你喜歡
布局組件界面
無人機智能巡檢在光伏電站組件診斷中的應用
Kistler全新的Kitimer2.0系統(tǒng)組件:使安全氣囊和安全帶測試更加可靠和高效
微重力下兩相控溫型儲液器內氣液界面仿真分析
先進纖維材料戰(zhàn)略布局
3月光伏組件出口量增長164.6%至7.49GW!單價創(chuàng)新低
國企黨委前置研究的“四個界面”
一種嵌入式軟件組件更新方法的研究與實現(xiàn)
扁平化設計在手機界面中的發(fā)展趨勢
商用WiFi蓄勢待發(fā)BAT360謹慎布局前景存疑
Lumileds汽車照明:新布局下的新思路
通州市| 乌拉特后旗| 万山特区| 苏尼特右旗| 阿拉尔市| 固阳县| 霸州市| 连州市| 南皮县| 哈巴河县| 沂南县| 腾冲县| 敦化市| 天柱县| 鄂温| 克什克腾旗| 休宁县| 漳浦县| 分宜县| 西乌珠穆沁旗| 淅川县| 泗阳县| 林口县| 吉木萨尔县| 巫溪县| 泰宁县| 游戏| 宜宾市| 岱山县| 武邑县| 孝昌县| 太保市| 上饶县| 陇西县| 东阳市| 湘阴县| 南木林县| 专栏| 定襄县| 高阳县| 格尔木市|