MVP 設計模式

APP設計模式 – MVP

張哲嘉 2019/12/23 11:32:12
1229

前言

本篇以引導的方式,先簡單介紹MVC in iOS而進一步到本篇的主角:MVP設計模式。最後,附上程式範例供參考。

 

大綱

1.     APPLE提出的MVC設計模式:介紹實體的定義及對應的分工。

2.     其他設計模式的提出。

3.     MVP設計模式:介紹實體的定義及對應的分工。

4.     MVP程式範例:登入功能。

 

內文

APPLE提出的MVC設計模式

這裡會特地標註APPLE提出的字眼是因為跟傳統的MVC設計模式不一樣。傳統MVC三個角色實體互相通信而且緊密耦合,大大降低複用性。

 

l    MVC in iOS – 願景

實體定義及分工:

MModel,模型層:包含數據和數據的商業邏輯。

VView,視圖層:顯示資料。

CController,控制層:視圖層和模型層的溝通橋樑。

從上圖可以看出ViewController是互相獨立的。但事實上當在專案裡創建一個Controller,同時會綁定一個View。這與APPLE理想的MVC設計模式還是有落差。

 

l    MVC in iOS – 事實

實體定義及分工:同上說明。

因為ViewController耦合性太高,所以設計模式更像M-VC

 

其他設計模式的提出

MVC in iOS設計模式存在的問題如下所述:

1.     無法很明確的劃分和定義各個實體。

2.     View直接與Model溝通,例如:UITableViewCell直接跟Model取得資料。

3.     幾乎所有的程式碼都寫在Controller裡,導致Controller太重,而ViewModel太輕。

4.     不易於測試。

所以新的設計模式不斷被提出。被提出的有MVVMMVPVIPVIPER,其中,又以MVVMMVP為主流。

 

MVP in iOS

MModel,模型層:封裝了應用程式的資料。

VView,視圖層:顯示資料。MVP設計模式將ViewController綁在一起視為View

PPresenter,協調層:視圖層和模型層的溝通橋樑。

 

MVP程式範例:登入功能

情境:當用戶輸入帳號和密碼,透過API(以模擬的方式呈現)回傳是否登入成功。

l    畫面截圖:

l    專案目錄:

l    M:模型層實作截圖

l    V:視圖層實作截圖:

l    P:協調層實作截圖:

 

結論

設計模式沒有什麼絕對性,都有各自的優缺點。程式開發領域追求的永遠沒有終點。唯有彈性的設計、不斷的思考和精益求精(站在巨人的肩膀上)才能使自己更上一層樓。

 

參考

l    http://chuquan.me/2018/04/11/mvc-mvp-mvvm/

l    https://chenliangjing.me/2017/04/27/iOS-架构模式之-MVP-模式/

l    http://www.cocoachina.com/articles/14916

l    https://www.cnblogs.com/artech/archive/2010/04/12/1710681.html

l   https://www.cnblogs.com/xjf125/p/10615691.html

l  https://www.kingwins.com.cn/content-4135.html

 

 

張哲嘉