[翻譯]MVP(SC),MVP(PV),PM,MVVM 和 MVC 表現模式架構對比
翻譯 CodeProject 上的一篇文章,對常見的幾種表現模式 (Presentation patterns) 進行了說明,并進行對比。原文地址是http://www.codeproject.com/KB/aspnet/ArchitectureComparison.aspx
表現模式 (Presentation patterns) 背景
與用戶界面 (UI) 相關的最大的問題就是大量的凌亂的代碼,主要是由這兩個因素造成的,首先是用戶界面包含負責的邏輯用于維護界面相關對象,其次也包含了應用程序狀態的維護。表現模式 (Presentation patterns) 就是圍繞如何移除用戶界面的復雜性,讓界面更加簡潔和可管理而產生的,下圖就是常見表現模式的種類與分類:
用戶界面的3大問題:狀態 (State) , 邏輯 (Logic) ,同步 (Synchronization)
- 狀態 (State) : 狀態是用戶界面最關心的問題之一。狀態是用戶界面數據的當前快照,在 Web 應用中,可能是 Session 級別的一個變量,在 Windows 應用中, 則可能只是界面級別的數據。 用戶界面包含的狀態越多, 則用戶界面越復雜。
- 邏輯 (Logic) : 用戶界面往往包含界面邏輯,例如維護文本框、組合框或者其它任何界面元素,用戶界面中這種邏輯越多,則用戶界面越復雜。
- 同步 (Synchronization) : 用戶界面通常需要和業務組件協作,因此用戶界面需要在界面元素與業務對象之間同步數據,如果用戶界面包含的同步任務越多,則用戶界面越復雜。
這三大問題與用戶界面的關系如下圖:
表現設計模式 (Presentation Design Pattern)
表現設計模式有助于解決上面列出的問題, 它的的基本邏輯就是創建一個額外的表現類 (Presenter) ,用來消化用戶界面中復雜的邏輯,數據和同步的問題,從而使得用戶界面變得簡單明了。根據這個類承擔責任的多少,決定了表現設計模式的類型,可能是 SC , PV , PM 等,也就是說,這個類的成熟度決定了它將是那種設計模式。

有用的縮寫
| 縮寫 | 完整形式 |
| V | 視圖 (View) 或者用戶界面 (UI) |
| P | 包含界面邏輯的表現類 (Presenter class which has the UI logic.) |
| L | 用戶界面邏輯 |
| S | 用戶界面的狀態 |
| M | 業務組件或業務對象 |
| SC | 監視控制器 (Supervising controller) |
| PV | 被動視圖 (Passive view) |
| PM | 表現模型 (Passive view) |
監視控制器模式 (SC)
- 狀態在視圖中保存
- 表現類擁有復雜的表現邏輯,只關注簡單的界面綁定邏輯,例如 WPF 或 Silverlight 等提供的綁定機制 (Presenter owns the complex presentation logic. Simple UI binding logic is taken care by using binding technologies like WPF binding and Silverlight binding. Anything complex is taken care presenter class. )
- 表現類關注視圖
- 視圖不關注表現類
- 視圖通過數據綁定和業務模型進行關聯
被動視圖模式 (PV)
- 狀態在視圖中保存
- 所有的界面邏輯都被包含在表現類中
- 視圖和業務模型完全獨立,這種情況下需要一些在業務模型和視圖之間進行同步數據的工作
- 表現類關注視圖
- 視圖不關注表現類
表現模型 (PM)
- 表現類包含邏輯
- 表現類包含狀態
- 表現類代表抽象的用戶界面
- 表現類不關注用戶界面
- 視圖關注表現類
- 視圖與業務模型完全隔離
MVVM
- 繼承自表現模型
- 使用 WPF 以及 Silverlight 的綁定機制
MVC
- 沒有表現類,有控制器 (Controller)
- 請求首先到達控制器
- 控制器負責綁定視圖與業務模型
- 邏輯存在于控制器中
總結與對比
下表是這幾種表現模式從狀態,邏輯與同步的角度進行的對比
| 狀態 | 邏輯 | 同步 | ||
| Supervising controller | ||||
| 表現類 | X | X | ||
| 視圖 | X | |||
| 業務模型 | 視圖和業務模型之間通過綁定進行連接。 | |||
| Passive View | ||||
| 表現類 | X | X | ||
| 視圖 | X | |||
| Presenter model | ||||
| 表現類 | X | X | ||
| 視圖 | X | |||
| MVVM | ||||
| 表現類 | X | X | ||
| 視圖 | X | |||
| 使用 WPF 、Silverlight 的數據綁定機制 | ||||
| MVC | ||||
| 控制器 | X | X | ||
| 視圖 | X | |||
再來一個圖的對比

張志敏所有文章遵循創作共用版權協議,要求署名、非商業 、保持一致。在滿足創作共用版權協議的基礎上可以轉載,但請以超鏈接形式注明出處。
本博客已經遷移到 GitHub , 圍觀地址: https://beginor.github.io/
浙公網安備 33010602011771號