天天看點

Android上的MVP:如何組織顯示層的内容

MVP(Model View Presenter)模式是著名的MVC(Model View Controller)模式的一個演化版本,目前它在Android應用開發中越來越重要了,大家也都在讨論關于MVP的理論,隻是結構化的資料非常少。這就是我寫這篇部落格的原因,我想鼓勵大家多參與讨論,然後把MVP模式運用在項目開發中。

MVP模式可以分離顯示層和邏輯層,是以功能接口如何工作與功能的展示可以實作分離,MVP模式理想化地可以實作同一份邏輯代碼搭配不同的顯示界面。首先要澄清就是MVP不是一個結構化的模式,它隻是負責顯示層而已,任何時候都可以在自己的項目結構中使用MVP模式。

我們知道在Android上邏輯接口和資料存取是緊耦合的,這個問題可以看看CursorAdapter這個例子,它既融合了擴充卡,同時也有顯示的成分,而cursor很大程度上應該是資料資料存取層的。

對于一個可擴充、穩定的應用來說,我們需要定義各個分離層,畢竟,我們不知道以後還要加入什麼邏輯,是從本地資料庫檢索資料?還是從遠端的web Service中?

MVP模式可以讓顯示界面和資料分離,我們開發的應用可以分離至少三層,這樣也可以進行獨立測試。有了MVP我們就可以從Activity中分離大部分代碼,而且不用單元測試可以對每個子產品進行單獨測試了。

說到這裡,問題就有點複雜了。實作MVP的方式有很多種,每個人都可以根據自己的需求和自己喜歡的方式去修正MVP的實作方式,它可以随着Presenter的複雜程度變化。

在View中需不需要控制進度條?或者是在Presenter處理?還有,誰來決定Action Bar該顯示什麼操作?這是一個艱難的決定。這裡我會展示我自己的做法,但是我希望本文成為一個讨論如何應用MVP的地方,因為目前為止還沒有實作MVP的标準方式。

Presenter主要作為溝通View和Model的橋梁,它從Model層檢索資料後,傳回給View層,但是不想典型的MVC結構,因為它也可以決定與View層的互動操作。

在Android上要分離接口和邏輯不容易實作,但是Model-View-Presenter模式可以更簡單的防止在Activity中摻雜太多代碼在大的項目中,組織好代碼結構是最基本的要求,不然,代碼的穩定和擴充就很困難了。