Android入門筆記(十一)
十一、資料繫結 與 MVVM
11.1 MVC
之前我們所使用的都是 MVC 架構,即組成為:
M - model 模型層:主要用來作為資料的 ORM 對映,將資料轉化為物件的形式來進行處理;
V - view 檢視層:主要的作用是用於頁面的檢視顯示,比如於 layout 中的 xml 型別的檔案;
C - controller 控制層:主要用於關聯模型層和檢視層,使資料能夠填充檢視層,從而完成資料在頁面上的顯示;
但是這樣的結構比較適合小型簡單的應用的開發,當專案進行到後期需要增加更多的功能和頁面的時候,就需要不斷的新增 activity 和 fragment ,這樣就會導致專案的目錄越來越臃腫,間接的增大了後期的維護和更新的難度。為了解決這個問題,我們可以將控制層進行一個功能的拆分,將功能較為繁雜的大類拆分為一個一個功能較少相對獨立的小類當中。
11.2 MVVM
這個我們可以選擇使用 MVVM 架構,即組成為:
M - model 模型層:主要用於資料的物件化;
V - view 檢視層:主要用於頁面的佈局的顯示;
VM - viewModel 檢視模型層:檢視層可以從其中來間接的獲取模型層的資料,用於檢視的顯示,這樣總結起來其主要作用就是完成格式化檢視資料;
使用這樣的 MVVM 架構,就可以使用資料繫結,元件關聯資料就能夠直接在佈局檔案裡處理了,而控制器物件開始負責初始化佈局繫結類和檢視模型物件,同時也作為它們之間的聯絡紐帶。
11.3 MVVM 的使用
(1)首先需要在 app/build.gradle 檔案中在 buildTypes 屬性的同級下建立 dataBinding 屬性,並其中的 enable = true;
(2)在需要使用的資料繫結的頁面中,將佈局結構置於 Layout 元素中,這時會自動生成佈局檔案的繫結類(繫結類的命名是將佈局檔名稱去掉下劃線並轉化為駝峰命名,最後在末尾加上 Binding),通過這個類可以引用根佈局和已經設定了 id 的元件元素;
(3)當我們使用資料繫結後,就不再需要 inflater.inflate 的方法來例項化佈局了,只需要 DataBindingUtil.inflate 方法例項化檢視的繫結類就可以了,之後相關佈局元件的例項化,也可以直接使用類命點 id 的方式來直接進行相關的操作;
(4)建立檢視模型類,在其中建立需要處理的相關模型類屬性,在之後的操作中檢視層和控制層可直接對其進行相關資料的設定和獲取;
(5)在檢視層即佈局檔案中通過 data 標籤中建立 variable 屬性來設定需要的檢視模型類,之後在佈局檔案中即可通過 @{viewModel.XXXX} 的形式來訪問檢視模型中的屬性和方法,並且 @{} 中還可以使用更多便捷的語法糖和 lambda,來減少工作量;
(6)在控制層,通過例項化資料繫結類後,即可通過其物件中的 setViewModel 和 getViewModel 的方式來設定和獲取佈局檔案所繫結的檢視模型類,並進行相關資料的存取和更改;
注:今天剛開始接觸 MVVM 架構 ,可能有些錯誤,這兩天努力熟悉架構後會進行更改,並增加一些新的內容。
我們都是程式設計路上的逐夢者,我會一直堅持每天更新,讓我們一起學習,一起進步。為了讓自己變得更好,讓我們加油吧!