當前位置:首頁 > 安卓源碼 > 技術博客 >

一千個Android研發就有一千種MVP,一文帶你吃透MVP的真正意義

時間:2020-02-27 16:20 來源:互聯網 作者:源碼搜藏 瀏覽: 收藏 挑錯 推薦 打印

這幾天又看了不少 MVP 的文章,真是千人千面啊,現在的 MVP 被大家玩壞了,什么樣的 MVP 模式都有啊~ 還記得當初 MVP 的出現為什么廣受歡迎嗎,還不是因為 Activity 被我們寫的太重了,太難看了,太亂了。遙記當年,簡單經過幾個版本之后 MainActivity 我就

這幾天又看了不少 MVP 的文章,真是千人千面啊,現在的 MVP 被大家玩壞了,什么樣的 MVP 模式都有啊~

還記得當初 MVP 的出現為什么廣受歡迎嗎,還不是因為 Activity 被我們寫的太重了,太難看了,太亂了。遙記當年,簡單經過幾個版本之后 MainActivity 我就寫到了 2200行,不說公司里的其他小伙伴,即便是我想理清楚其中關節都不容易,代碼很難維護。而 MVP 的出現則帶來了曙光,從此 Activity 變得清爽了,因為我們把代碼移到 P 里面去啦,再然后 P 就經歷了當年 V 的覆轍

尤其是有的小伙伴把 P 當做了萬金油,P 在 N 多個頁面之間復用,因為一開始的確是可以拿來直接就用,但是隨著版本更新,產品天馬行空般的想法,以前看著相似的頁面越來越多的產生差異,甚至不同,這時候再回過頭來看我們的 P,有的 P 里面代碼,邏輯非常復雜,不亞于以前我們那 2200 行的 Activity,歷史在這一刻又重復了

我不知道大家想過沒有,為什么會這樣呢,mvp 不應該讓我們的代碼更簡潔嗎,為什么核心頁面的 P 越來越難維護呢,為什么小伙伴們都不愿意接手我的代碼,我也不愿意接手別人的代碼,因為我們心里知道我得徹底的看一遍,要不真玩不轉...

還記得這張圖嘛

一千個Android研發就有一千種MVP,一文帶你吃透MVP的真正意義

我們最早學習 MVP 時都看過這樣圖,其實一開始這張圖就告訴我們了,MVP 是種解耦,分層思想,而不是復用機制。當我們更多的把 P 當做數據,業務層面的復用機制時,P 的難用自然就隨之而來

MVP 是指一個頁面中:顯示,數據,操作的分離,P 的職責是負責分層一個頁面,而不是多個頁面。若是多個頁面大體可以使用一個 P 的話,其實 P 也不應該去做復用,這脫離了它的初衷,復用的是業務邏輯,而不是 P 本身,否則隨著版本的變遷,當初看似相同的頁面,大多數時候會產生相當多的差異,你若是在最初復用 P 的話,那就只能是在這個 P 里不同的根據不同的頁面頁面添加不同的邏輯代碼,這些代碼相互交織,很容易出 bug,也變得越來越難以理解,除非你再拆分這個 P

MVP 應該是什么樣子的

有句調侃的話:有一千個人就會有一千種 MVP,我想大家都聽過吧,這其實說明我們最初都沒有真正理解 MVP 的設計初衷。

JAVA OOP 里面有個指導思想:單一職責,這里其實可以套用到 MVP 身上,是對一個頁面的分層,而不是多個,V 和 P 應該是一一對應的關系,有一個 V 就應該有一個 P 與之對應

所以那些 P 對應多個 V,V 對應多個 P 的其實在分層的角度來看都是不恰當的。我們不是在寫功能模塊,比如地圖,我們抽象核心接口,然后多態切換不同廠商實現,也不是寫數據模塊,同樣的 repositroy 給不同的業務模塊復用

UI 不同于功能實現,因為其顯示復雜性,造成代碼過多,不利于維護,我們才使用 MVP 思路來分層剝離實現,以達到便于維護的目的,是種結構層次上的優化,剝離出來的角色是一一對應的關系,拿來做復用其實是沒理解 MVP 本身

這好比,以前我們都是一坨史萊姆,所有的都揉在一塊,使用 MVP 模板讓我們變成了人,產生了專門負責一種功能的器官,手就是拿東西的,腳即使用來走路的,嘴就是用來吃東西的,這讓我們從一團混沌變得清晰。這時候你說多個人之間可以復用同一雙手,人和人最初可能相同,但是隨著時間人和人之間會產生差異,A 是搬磚的,A 的手就會變得粗糙;B 是做大保健的,B 的手變得柔順靈活;C 是打拳擊的,C 的手孔武有力,你說要是 ABC 3人當初用的是同一雙手,你說這時候這雙手會變成什么樣...

abstract class BaseActivity<V, P : BasePersenter<V>> : AppCompatActivity() {}

abstract class BasePersenter<V> {}

class MacActivity : BaseActivity<MacActivity, MacPersenter>() {}

class MacPersenter : BasePersenter<MacActivity>() {}

MVP 之間其實因為一一對應 的結構關系,沒必要寫一堆接口,針對那些可以服用的業務邏輯我們復用的心思打在 P 身上是不對的,推薦大家去看看 MVI

最后

最后我想說:嚴格的分層其實比復用要重要的多,嚴格的分層會讓我們的代碼一直容易查看,維護,雖說一上來可以能增加工作量,但是越往后優勢越大。著眼于未來常常會加大我們當下的工作量,但是會讓我們今后受益無窮

肯定會被噴,但是這就是我想說的,正確與否歡迎大家討論,我的目的就是想讓大家重新審視一下自己的代碼

在這我也分享一份大佬自己收錄整理的 Android學習PDF+架構視頻+面試文檔+源碼筆記 ,還有高級架構技術進階腦圖、Android開發面試專題資料,高級進階架構資料這些都是我閑暇還會反復翻閱的精品資料。在腦圖中,每個知識點專題都配有相對應的實戰項目,可以有效的幫助大家掌握知識點。

一千個Android研發就有一千種MVP,一文帶你吃透MVP的真正意義 轉載http://www.hxslwl.com/appboke/44463.html

技術博客閱讀排行

最新文章

久久人人97超碰人人澡,久久人人97超碰人人澡苹果,久久人人97超碰