MVI 設計模式嘗鮮
作者 PcDack
地址 https://www.jianshu.com/p/dcb7b536066c
聲明 本文是 PcDack 原創投稿,轉發請聯繫原作者授權。
聽說你已經會了 MVP,MVC,MVVP 那麼 MVI 在向你招手
是什麼
Model-View-Intent是安卓最新的設計模式。它的靈感來自於於André Staltz的Cycle.js ,並且被 Hannes Dorfmann帶到安卓世界。
Model-View-Intent
你可能看過Model在其他的設計模式比如MVC,MVP或者MVVP。但是MVI的Model和其他設計模式的完全不一樣:
MVI的整體流程圖
這張圖描述了MVI模式的響應,和數據的流動方向。我們的Model是被Domain層管理和維護的,用來對用戶的某種意圖/動作/命令,做出反應的。只要有新的Model被創建,那麼,意味著我們的View肯定要被更新。
為什麼
這種模式,打開了開發安卓的新思路。我們可以將整個項目按照用戶的操作/命令/動作來設計APP。
如何做使用到的依賴
MVI模式快速開發的依賴
為什麼使用mosby庫
使用Mosby庫來構建MVI。這個庫可以讓我們關注程序設計的藍圖,例如MVI的內容和業務邏輯,而不是處理棘手RxJava API和內存管理。
網路請求依賴
結構
其中data是用來進行數據請求的
domain用來管理Model
mvi用來管理View的
實現過程MVI層實現View
在MVI模式中,我們的View是由兩部分構成的。在上面我們也說過了,就是一系列用戶動作的可觀察對象的介面和一個渲染方法
其中state,將在我們的Domain層定義
實現Presenter
在MVI模式中,Presenter是Domain和View層交互的橋樑,在這個例子中,我們需要將獲取天氣請求的意圖/動作/命令,與獲取天氣數據綁定起來
Domain層
在Domain層,我們用來實現Model,在這裡例子中,我們只要完成一個Model,也就是天氣請求的Model。請求天氣這個Model下,有三種狀態:1.載入狀態2.數據獲取狀態3.錯誤狀態
具體代碼
獲取數據的具體方法
Data層
數據請求的具體實現,我們這裡,就是獲取天氣數據的獲取
最後的工作
實現MainActivity,MainActivity需要繼承自,並且需要實現我們的View即
其中的關鍵點,我都已經注釋了
效果展示源碼github
GIF
https://github.com/pcdack/MyMVITest
TAG:code小生 |