咖啡伴侶

          呆在上海
          posts - 163, comments - 156, trackbacks - 0, articles - 2

          MVC與MVP

          Posted on 2010-02-28 15:38 oathleo 閱讀(2851) 評論(6)  編輯  收藏 所屬分類: Java
          很長一段時間,對MVC和MVP區別很是模糊。
          一直忙碌于客戶不停的需求中,忽略了產品本身上這些最重要的東西。
          現在即將待業,放下自己為之工作近三年的產品,真的感覺猶如失去自己的孩子。
          好的一方面是空閑的時間多了,終于可以想想這些事情了。

          MVC算是個被人說爛掉的東西了,MVP也屢屢被人提及。
          最大的區別在哪里呢?為什么要再演變個MVP出來呢?

          就定義上來說最大的區別在于C和P,就構架上來說,是View層實現的方式不同。
          MVC:View層肩負很大任務,View關聯Model,View的渲染是直接通過Model層的數據來確定的。還是有很多業務邏輯在View上完成。
          MVP:View層的任務大大縮減,View不再知道Model,P層完成上面提到的View層完成的業務邏輯。
          總之一句話MVP里,View層絕對不能再訪問Model了,

          任何一種設計模式的出現絕對不是為了出現而出現的。總是為了解決現實中存在的某些老的模式無法或難以解決的問題才出現的。

          為什么會出現MVP呢?
          看看客戶拿到一個設計精良的MVC的產品,做二次開發的時候,如果他項目足夠大,肯定會發現MVC的好處。任務集中在Model層,設計好Model層數據的填充,簡單的實現就完成了。MVC的架構幫他解決了很多問題,大家很Happy!
          當然客戶的需求總是永無止境的,當簡單需求被滿足的時候,他又會往高層次發展,也許他就完全需要不同的View來做同樣的Model的展示(比如一個在JSP,一個在Swing或者Android上),在這個時候,稍微想下,他就發現他要做的任務開始變的很大了。Model層的數據縱使可以共享,事件控制(轉發)也能,而View層無論如何是逃不了了。于是Web程序員硬著頭皮也要學Swing,Swing的程序員郁悶的學JSP。
          試想這個時候如果有個人,能把陷在View上的上萬行code,拉到一個即能聯系到Model,又能聯系到View的層次上,那真的要感謝蒼天大地了。

          MVP我想應該就是在這個時候出現的。它處理所有View和Model之間的消息傳遞,數據更新,交互操作。比如從Swing的TextField里輸入個字段信息,和從JSP里的Form里輸入這個字段信息,處理的流程應該是可以共享這段代碼的。當然這個時候,為了解決不同View上的一些特殊情況,可以使用適配器模式,來處理多個View的程序設計問題。

          設計模式沒有好壞之分,只有合不合適。你的產品如果只需要輸入個A返回個B,沒有平臺建議,沒有系統升級,那就忘了所有的設計模式,走那條最快實現的路吧。

          Feedback

          # re: MVC與MVP  回復  更多評論   

          2010-03-01 09:18 by Aspen
          "完全需要不同的View來做同樣的Model的展示",這不就是MVC?

          # re: MVC與MVP  回復  更多評論   

          2010-03-01 10:37 by /admin
          不是看的很明白

          # re: MVC與MVP  回復  更多評論   

          2010-03-01 12:58 by oathleo
          @Aspen
          比如一個項目,先在Swing的View里寫了一堆邏輯代碼,后面升級到BS模式,會發現Swing的View里的這些邏輯,其實很多BS里同樣需要用的

          # re: MVC與MVP  回復  更多評論   

          2010-03-01 22:02 by 凡客誠品
          是大幅減少的糾紛

          # re: MVC與MVP[未登錄]  回復  更多評論   

          2010-03-03 09:15 by test
          http://www.chenfangfang.com

          # re: MVC與MVP  回復  更多評論   

          2010-03-03 11:14 by oathleo
          @Aspen
          可能jsp和swing的例子舉的確實是很不恰當。
          這樣來說:
          系統有兩套View
          一套AWT,一套Swing,都是Java實現

          這個時候MVC模式下,View上的很多邏輯代碼,就可能有很多可以共享。而這些代碼放在Model層上顯然不合適(因為這些代碼可能需要View的實例),這個時候P層的出現就可以解決這個問題。
          主站蜘蛛池模板: 海城市| 平度市| 北流市| 芜湖市| 瓮安县| 云南省| 新宁县| 兴山县| 休宁县| 手机| 仁化县| 衢州市| 宝坻区| 镇远县| 庆安县| 定边县| 东辽县| 湟源县| 松阳县| 泸州市| 土默特右旗| 桂林市| 定州市| 句容市| 阿坝县| 民乐县| 义乌市| 吴川市| 延长县| 科尔| 泾源县| 读书| 台中县| 鲜城| 祥云县| 老河口市| 南澳县| 镇江市| 车险| 吉首市| 洪洞县|