當前位置:
首頁 > 最新 > MVP 完全解析+實戰:實現直播登錄

MVP 完全解析+實戰:實現直播登錄

本文為菜鳥窩作者蔣志碧的連載。「從 0 開始開發一款直播 APP 」系列,如何完整的實現一個類"直播"的商業化項目

視頻地址:http://www.cniao5.com/course/10121

MVP 概述

在無任何架構模式下的開發時,Activity 和 Model 之間的關係太緊密,做了所有的操作,不易維護,擴展性差。如果所有邏輯都在 Activity 中實現,代碼顯得臃腫不易維護和修改。MVP(Model-View-Presenter,模型-視圖-表示器)模式則是由 IBM 開發出來的一個針對 C++ 和 Java 的編程模型,大概出現於 2000 年,是 MVC 模式的一個變種,主要用來隔離UI、UI 邏輯和業務邏輯、數據。MVP 模式中不容許 View 直接訪問 Model,這是 MVP 和 MVC 之間最大的不同。View 中應該只有 UI 邏輯,捕捉用戶輸入以及視圖的渲染。這樣將其它複雜的邏輯抽離出來放到 Presenter 中去,這樣就出現了MVP。簡單的說,就是將 View 中的複雜工作抽取到 Presenter 中,降低了耦合度,便於維護和測試,也增強了復用性。Presenter 是 Model 和 View 之間的橋樑,為了讓結構變得更加簡單,View 並不能直接對 Model 進行操作,這也是 MVP 與 MVC 最大的不同之處。Model — 業務邏輯和數據模型。

Model 層主要負責1、從網路,資料庫,文件,感測器,第三方等數據源讀寫數據。2、對外部的數據類型進行解析轉換為 APP 內部數據交由上層處理。3、對數據的臨時存儲,管理,協調上層數據請求。View — View 的繪製和用戶交互

View 層主要負責1、提供 UI 交互2、在 Presenter 的控制下修改 UI3、將業務事件交由 Presenter 處理注意:View 層不存儲數據,不與 Model 層交互Presenter — View 和 Model 間的交互

Presenter 層主要負責1、作為 View 和 Model 之間的紐帶,處理與用戶交互的邏輯實現。2、根據用戶在視圖中的行為更新模型的邏輯3、負責從 View 視圖中取得數據發送給模型MVP 優點

1、降低耦合度,實現了Model和View真正的完全分離,可以修改 View 而不影響 Model2、模塊職責劃分明顯,層次清晰3、隱藏數據4、 Presenter 可以復用,一個 Presenter 可以用於多個 View,而不需要更改 Presenter的邏輯(當然是在 View 的改動不影響業務邏輯的前提下)5、利於測試驅動開發。在使用 MVP 的項目中 Presenter 對 View 是通過介面進行,在對 Presenter 進行不依賴 UI 環境的單元測試的時候。可以通過 Mock 一個 View 對象,這個對象只需要實現了 View 的介面即可。然後依賴注入到 Presenter 中,單元測試的時候就可以完整的測試 Presenter 應用邏輯的正確性。6、View可以進行組件化。在MVP當中,View不依賴Model。這樣就可以讓View從特定的業務場景中脫離出來,可以說View可以做到對業務完全無知。它只需要提供一系列介面提供給上層操作。這樣就可以做到高度可復用的View組件。7、提高代碼靈活性MVP 缺點

1、Presenter中除了應用邏輯以外,還有大量的 View -> Model,Model -> View 的手動同步邏輯,造成 Presenter 比較笨重,維護起來會比較困難。2、由於對視圖的渲染放在了 Presenter 中,所以視圖和 Presenter 的交互會過於頻繁。3、如果 Presenter 過多地渲染了視圖,往往會使得它與特定的視圖的聯繫過於緊密。一旦視圖需要變更,那麼 Presenter 也需要變更了。4、額外的代碼複雜度及學習成本。MVP 使用

MVP 的邏輯實現類圖,根據 MVP 模型,定義 P 層和 V 層介面以及基本方法以及 M 層相關方法。使用 MVP 大致要做以下步驟

1、創建 IPresenter 介面,把所有業務邏輯介面都定義在內,並創建它的實現類 PresenterImpl。Ipresenter 持有 IView 的引用,調用 IView 中的方法。2、創建 IView介面,把所有視圖邏輯的介面都定義在內,創建其實現類 Activity / Fragment。3、IPresenter 間接持有 Model 的引用,但 Model 並不是必須有的,但是一定會有 Presenter 和 View。4、在上圖中可以看到,Activity 中包含了一個 IPresenter,而 PresenterImpl 里包含了一個 IView並依賴於 Model。Activity 只保留了對 IPresenter 的調用,其它工作全部由 PresenterImpl 實現。MVP 實現登錄

Presenter — LoginPresenter

1、定義 BasePresenter 介面,主要方法是 start() — presenter 開始處理數據,綁定 Presenter 。 finish() — 處理銷毀工作,界面結束時調用,取消綁定 Presenter 的方法。2、定義 ILoginPresenter 抽象類實現 BasePresenter 介面,定義登錄所需邏輯處理方法,與 ILoginView 關聯。3、定義 LoginPresenter 繼承 ILoginPresenter 抽象類,實現抽象方法以及處理邏輯。View — LoginActivity

1、定義 BaseView 介面,將通用方法封裝到裡面。2、定義 ILoginView 介面,定義登錄需要的通用方法。3、創建 LoginActivity 實現 ILoginView 介面,並與 LoginPresenter 關聯。Model — UserInfo

根據登錄請求數據定義 Model 所需欄位以及 set() 和 get() 方法,注意:Model 要實現序列化介面。根據相關類圖創建包和類。

對登錄不了解的請查看【從 0 開始開發一款直播 APP】4.4 網路封裝之 OkHttp -- 網路請求實現直播登錄Presenter 所有類實現

1、BasePresenter

2、ILoginPresenter

3、LoginPresenter

實現 ILoginPresenter 介面及其方法的邏輯

View 所有類實現

1、BaseView

2、ILoginView

在 LoginPresenter 中綁定了 ILoginView,在 LoginPresenter 實現邏輯時調用的時 ILoginView 中的方法。

3、LoginActivity

之前的文章中有講過用戶登錄實現,那時是硬實現,沒有邏輯分層,可以結合前面的文章一起學習。

Model 的定義

1、UserInfo 要實現序列化介面

2、UserInfoCache 也要實現序列化介面

賬號欄位在後面的文章介紹,這裡直接貼出來。

登錄實現運行效果

參考:http://www.jianshu.com/p/9a6845b26856http://www.jianshu.com/p/f6252719b3af

GIF/1K

乾貨讓更多的人閱讀,分享一下吧

更多由阿里,騰訊等大神的乾貨請關注菜鳥窩公眾號

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 菜鳥窩官網 的精彩文章:

TAG:菜鳥窩官網 |

您可能感興趣

自定義瀏覽器下JS直接進行DLL訪問實現
HMAC演算法分析與實現
意法半導體推出專業 MEMS 開發工具 實現MEMS 感測可視化
MQTT 簡單介紹與實現
VR+AI將構建超級互聯網,實現VR+傳統產業融合
【一線】vivo AEPX概念機亮相MWC 實現半屏指紋解鎖
CRM落地:快目標APP實現軟體行業盈利提升
MCPTT終端軟體的設計與實現
OFDM系統自適應同步研究與DSP實現
「渦輪增壓」如何實現?全新VAIO S13拆解評析
電腦番外:論通過VR實現SAO的可能性
深入了解SiC MOSFET實現建議和解決方案示例
OPPO下款新機或將採用TOF技術,將實現AR虛擬現實
OPPOFindX完全現身:面部解鎖與全面屏原來是這樣實現的
蘋果自研MicroLED屏幕,實現真正全面屏,擺脫三星控制!
谷歌欲將AMP升格為行業標準:實現全網網頁提速
OpenAI提出新型神經網路:自動計算詞對象,實現實體消岐
TOF技術或將在OPPO下一代產品實現,遠程VR體驗成為現實
家裝設計≠實際效果?得見另闢賽道,大數據驅動下實現C2B定製
C井調用Windows API實現自動登錄