APP設計模式 – MVP
前言
本篇以引導的方式,先簡單介紹MVC in iOS而進一步到本篇的主角:MVP設計模式。最後,附上程式範例供參考。
大綱
1. APPLE提出的MVC設計模式:介紹實體的定義及對應的分工。
2. 其他設計模式的提出。
3. MVP設計模式:介紹實體的定義及對應的分工。
4. MVP程式範例:登入功能。
內文
APPLE提出的MVC設計模式
這裡會特地標註APPLE提出的字眼是因為跟傳統的MVC設計模式不一樣。傳統MVC三個角色實體互相通信而且緊密耦合,大大降低複用性。
l MVC in iOS – 願景
實體定義及分工:
M:Model,模型層:包含數據和數據的商業邏輯。
V:View,視圖層:顯示資料。
C:Controller,控制層:視圖層和模型層的溝通橋樑。
從上圖可以看出View和Controller是互相獨立的。但事實上當在專案裡創建一個Controller,同時會綁定一個View。這與APPLE理想的MVC設計模式還是有落差。
l MVC in iOS – 事實
實體定義及分工:同上說明。
因為View和Controller耦合性太高,所以設計模式更像M-VC。
其他設計模式的提出
MVC in iOS設計模式存在的問題如下所述:
1. 無法很明確的劃分和定義各個實體。
2. View直接與Model溝通,例如:UITableView的Cell直接跟Model取得資料。
3. 幾乎所有的程式碼都寫在Controller裡,導致Controller太重,而View和Model太輕。
4. 不易於測試。
所以新的設計模式不斷被提出。被提出的有MVVM、MVP、VIP、VIPER,其中,又以MVVM和MVP為主流。
MVP in iOS
M:Model,模型層:封裝了應用程式的資料。
V:View,視圖層:顯示資料。MVP設計模式將View和Controller綁在一起視為View。
P:Presenter,協調層:視圖層和模型層的溝通橋樑。
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