每次看MVC架構(gòu)的項(xiàng)目時(shí),都會(huì)在比較臃腫的Activity店印、Fragment里面閱讀隶糕,對(duì)一個(gè)界面的邏輯理解并不是那么的清晰瓷产。當(dāng)然,Android的MVC架構(gòu)枚驻,很多都不是特別的清晰拦英,因?yàn)锳ctivity作為控制器,卻做了很多視圖的處理测秸,或者把Activity理解成為視圖疤估,卻擁有著大量的控制器邏輯。MVP架構(gòu)會(huì)在這個(gè)MVC基礎(chǔ)上錦上添花霎冯。雖然會(huì)添加很多接口類铃拇,但清晰度上面提高了,后面通過(guò)泛型應(yīng)該也可以簡(jiǎn)約更多的代碼沈撞。
Android官方MVP架構(gòu):
https://github.com/googlesamples/android-architecture
學(xué)習(xí)后分析了一下慷荔,先上圖
Activity作為MVP的主控制,初始化Precenter(P)缠俺、Fragment(V)显晶、TasksRepository(M)贷岸,View層響應(yīng)UI事件,并通過(guò)Precenter層去獲取數(shù)據(jù)磷雇,Precenter會(huì)通過(guò)調(diào)用Model層去獲取內(nèi)存中緩存的偿警、本地?cái)?shù)據(jù)庫(kù)的、網(wǎng)絡(luò)服務(wù)器的數(shù)據(jù)唯笙,最終通過(guò)回調(diào)方法響應(yīng)數(shù)據(jù)到View層顯示螟蒸。
在看看官網(wǎng)demo的目錄結(jié)構(gòu):
從契約類Contract可以看出,Precenter跟View層的接口都比較清晰的查看崩掘,而Model層則是通過(guò)實(shí)現(xiàn)TasksDataSource接口七嫌,達(dá)到數(shù)據(jù)獲取、網(wǎng)絡(luò)數(shù)據(jù)獲取苞慢、本地?cái)?shù)據(jù)獲取诵原,都是實(shí)現(xiàn)相同的接口。因此三者具體的交互應(yīng)該是這樣的