在我心中的模型視圖控制器模式的所有變化的差異(MVP,Passive View,Supervising Controller,視圖模型,etc.)是相當微妙。這完全取決於誰來處理數據並真正從誰那裏獲取數據。他們都試圖解決同樣的問題,分開東西另一件事,和解決方案做了所有類似的方式。
這幾乎是公然明顯的概念在實現上相似,當你想想它在視覺方面:
Simplistic MVC:
+-------+ manipulates data
| Model |<---------------------+
+-------+ |
| |
| gets data |
v |
+------------+ serves data +------+
| Controller |------------->| View |
+------------+ +------+
Simplistic MVP:
+-------+
| Model |
+-------+
|^
| | get/manipulates data
v |
+-----------+ serve data +------+
| Presenter |-------------->| View |
| |<--------------| |
+-----------+ tell changes +------+
他們是在類層次結構可能看起來是一樣的兩個相近。不同的是顯示和操作數據的方式不同。當你推出你自己的MVC時,你負責它應該是什麼樣子。
這並不重要,因爲它們都基於將代碼段分成自服務邏輯實體和減少代碼重複的原則。只要你保持code coupling low它最終應該很好地工作。只有當你想在應用程序的體系結構中以教條形式出現時才重要。
務實一點,做到最適合您的需求是最好的,因爲無論如何您最終都會混合在一起。根據視圖的需要,在各種變體之間切換應該「相當」容易。按照SOLID的原則,你應該沒問題。 (另見this about SOLID)。
我建議你看看是否有MVC或MVP框架來看看它是如何完成的。
+ 1..always升值ASCII圖在回答一個很好的參考實現。 – 2010-01-16 13:57:34
spoike:你的回答很有說服力。謝謝。 – Sumeet 2010-01-19 04:28:22