NO IMAGE
1 Star2 Stars3 Stars4 Stars5 Stars 給文章打分!
Loading...

近期主要工作之一是一個模組的AAC框架改造,在此記錄一下改造過程中遇到的問題以及一些改造經驗。

AAC框架的概念和意義,先不細講,日後有時間補上。

簡單來說,AAC是一個將程式碼結構更加解耦的框架。新引入的livedata,可以與控制元件繫結,通過監聽自身資料的改變通知控制元件重新整理。節省了手動set的過程。

那麼一個簡單的AAC框架程式碼應用,都包括哪些內容呢。以下是個人見解。

首先,AAC整體結構上還是基於MVVM框架,要有Model,View和ViewModel。其中Model就是LiveData,View是UI控制元件,ViewModel是負責邏輯以及資料處理,通過它聯絡View和Model使得View和Model做到完全解耦(實際上model與view進行了繫結)。

我們把資料轉化封裝成我們想要且使用方便的LiveData,之後建立ViewModel。View部分也很簡單,就是找到UI佈局控制元件。重頭戲可以說全在ViewModel上了。ViewModel會持有LiveData,同時提供方法將View與LiveData繫結,繫結時提供LiveData改變時View的重新整理策略。至於ViewModel該不該持有View,個人覺得可以不持有,因為這樣更符合解耦的大前提,而且View與其它二者的關係就在繫結那一瞬間。剩下的就是ViewModel自己的表演了,裡面會處理一些資料邏輯,如何展示之類的。

之前寫的可能有些亂,總結一下

一 Model

在AAC框架中為LiveData,把資料封裝成我們想要的結構,之後建立對應的LiveData。

二 View

仍然是傳統的UI控制元件,通過findViewById形式找到。

三 ViewModel

1 持有LiveData,可以通過set等方式設定LiveData

2 繫結View,通過bindView等方法將View作為引數,與LiveData繫結,同時提供資料變化是的重新整理方法。

3 處理邏輯,有一些邏輯需要viewModel處理完再講結果更新到LiveData同時重新整理View。

最後一點延伸,最簡單的結構莫過於一個控制元件對應一套MVVM組合,然後實際開發中,控制元件和功能的巢狀是比較複雜的,這就要求我們把最小的控制元件單位區分好,之後再將它們整合到一起。整合過程中,View和Model是解耦的,然而ViewModel則需要有一定關聯。往往是一個大的ViewModel中包含很多小的ViewModel,邏輯全都在裡面。不過只要我們做到將MVVM最小化,程式碼結構還是很清晰的,其中的任意一個viewModel拿出去,都是可以獨立使用的。

經過一天思考和測試,發現recyclerView和listView可能不太適合liveData結構,因為LiveData本身是基於觀察者模式,而adapter其實也是基於觀察者模式的,兩者同時使用會有些重複。對於列表來講,使用recyclerView或者Listview的adapter就已經足夠了。AAC模式應該針對於那種在acitivty或者fragment大布局中的固定控制元件佈局,通過資料的變化實現其重新整理,而adapter本身具有重新整理功能,在重構程式碼時要額外注意。

相關文章

程式語言 最新文章