VIPER與MVC系列架構(gòu)的差異就在于VIPER擁有用于頁面跳轉(zhuǎn)的路由摹恰。
VIPER由五部分組成:View蓬推、Interacator游昼、Presenter树埠、Entity、Router
視圖層(View):與MVP或者MVVM的視圖層類似痰滋,它包含與UI相關(guān)的一切操作音念,接收用戶的交互信息席纽,但是并不處理,而是傳遞給展示層(Presenter)
展示層(Presenter):與MVP中的Presenter或是MVVM中的ViewModel功能類似屑彻,對于其更像MVP的Presenter還是更像MVVM中的ViewModel,取決于其中是否引入響應(yīng)式編程框架顶吮。Presenter在這里只是響應(yīng)并處理視圖層傳來的交互操作請求社牲,并不直接對數(shù)據(jù)源進行修改,這是與其他架構(gòu)模式最大的不同悴了。若要修改數(shù)據(jù)搏恤,展示層會向其持有的數(shù)據(jù)管理層(Interactor)發(fā)送請求,Interactor會處理一切有關(guān)數(shù)據(jù)源的操作湃交。此外熟空,它還連接了路由層(Router)
路由層(Router):專門負責頁面跳轉(zhuǎn)和組件之間的切換。當App占用空間較小時搞莺,Router負責頁面跳轉(zhuǎn)息罗。當App占用空間較大時,不同的功能和業(yè)務(wù)會被拆分為不同的模塊或組件才沧,Router就是在不同的組件之間進行切換迈喉。這是其他架構(gòu)所忽略的部分
數(shù)據(jù)管理層(Interactor):專門負責處理數(shù)據(jù)源信息,包括網(wǎng)絡(luò)請求温圆、數(shù)據(jù)傳輸挨摸、緩存、存儲岁歉、生成實例等操作得运。實際上,之前中間層和模型層的一些邏輯被進一步剝離至此锅移,整個架構(gòu)的邏輯也更加清晰熔掺。
模型層(Entity):只擁有初始化方法和屬性相關(guān)的get/set方法,與之前的Model大同小異非剃。
由于分工明確瞬女,VIPER層在代碼分配、測試覆蓋率上為所有架構(gòu)之冠努潘。
而VIPER的缺點在于诽偷,它依然與其他架構(gòu)一樣,是一個視圖驅(qū)動的架構(gòu)疯坤。同時报慕,VIPER由于分工精細,不同層級之間交互大代碼很多压怠,總體代碼量很大眠冈,不適宜用在小型App中