很長(zhǎng)一段時(shí)間,對(duì)MVC和MVP區(qū)別很是模糊。
一直忙碌于客戶不停的需求中,忽略了產(chǎn)品本身上這些最重要的東西。
現(xiàn)在即將待業(yè),放下自己為之工作近三年的產(chǎn)品,真的感覺(jué)猶如失去自己的孩子。
好的一方面是空閑的時(shí)間多了,終于可以想想這些事情了。
MVC算是個(gè)被人說(shuō)爛掉的東西了,MVP也屢屢被人提及。
最大的區(qū)別在哪里呢?為什么要再演變個(gè)MVP出來(lái)呢?
就定義上來(lái)說(shuō)最大的區(qū)別在于C和P,就構(gòu)架上來(lái)說(shuō),是View層實(shí)現(xiàn)的方式不同。
MVC:View層肩負(fù)很大任務(wù),View關(guān)聯(lián)Model,View的渲染是直接通過(guò)Model層的數(shù)據(jù)來(lái)確定的。還是有很多業(yè)務(wù)邏輯在View上完成。
MVP:View層的任務(wù)大大縮減,View不再知道Model,P層完成上面提到的View層完成的業(yè)務(wù)邏輯。
總之一句話MVP里,View層絕對(duì)不能再訪問(wèn)Model了,
任何一種設(shè)計(jì)模式的出現(xiàn)絕對(duì)不是為了出現(xiàn)而出現(xiàn)的??偸菫榱私鉀Q現(xiàn)實(shí)中存在的某些老的模式無(wú)法或難以解決的問(wèn)題才出現(xiàn)的。
為什么會(huì)出現(xiàn)MVP呢?
看看客戶拿到一個(gè)設(shè)計(jì)精良的MVC的產(chǎn)品,做二次開(kāi)發(fā)的時(shí)候,如果他項(xiàng)目足夠大,肯定會(huì)發(fā)現(xiàn)MVC的好處。任務(wù)集中在Model層,設(shè)計(jì)好Model層數(shù)據(jù)的填充,簡(jiǎn)單的實(shí)現(xiàn)就完成了。MVC的架構(gòu)幫他解決了很多問(wèn)題,大家很Happy!
當(dāng)然客戶的需求總是永無(wú)止境的,當(dāng)簡(jiǎn)單需求被滿足的時(shí)候,他又會(huì)往高層次發(fā)展,也許他就完全需要不同的View來(lái)做同樣的Model的展示(比如一個(gè)在JSP,一個(gè)在Swing或者Android上),在這個(gè)時(shí)候,稍微想下,他就發(fā)現(xiàn)他要做的任務(wù)開(kāi)始變的很大了。Model層的數(shù)據(jù)縱使可以共享,事件控制(轉(zhuǎn)發(fā))也能,而View層無(wú)論如何是逃不了了。于是Web程序員硬著頭皮也要學(xué)Swing,Swing的程序員郁悶的學(xué)JSP。
試想這個(gè)時(shí)候如果有個(gè)人,能把陷在View上的上萬(wàn)行code,拉到一個(gè)即能聯(lián)系到Model,又能聯(lián)系到View的層次上,那真的要感謝蒼天大地了。
MVP我想應(yīng)該就是在這個(gè)時(shí)候出現(xiàn)的。它處理所有View和Model之間的消息傳遞,數(shù)據(jù)更新,交互操作。比如從Swing的TextField里輸入個(gè)字段信息,和從JSP里的Form里輸入這個(gè)字段信息,處理的流程應(yīng)該是可以共享這段代碼的。當(dāng)然這個(gè)時(shí)候,為了解決不同View上的一些特殊情況,可以使用適配器模式,來(lái)處理多個(gè)View的程序設(shè)計(jì)問(wèn)題。
設(shè)計(jì)模式?jīng)]有好壞之分,只有合不合適。你的產(chǎn)品如果只需要輸入個(gè)A返回個(gè)B,沒(méi)有平臺(tái)建議,沒(méi)有系統(tǒng)升級(jí),那就忘了所有的設(shè)計(jì)模式,走那條最快實(shí)現(xiàn)的路吧。
一直忙碌于客戶不停的需求中,忽略了產(chǎn)品本身上這些最重要的東西。
現(xiàn)在即將待業(yè),放下自己為之工作近三年的產(chǎn)品,真的感覺(jué)猶如失去自己的孩子。
好的一方面是空閑的時(shí)間多了,終于可以想想這些事情了。
MVC算是個(gè)被人說(shuō)爛掉的東西了,MVP也屢屢被人提及。
最大的區(qū)別在哪里呢?為什么要再演變個(gè)MVP出來(lái)呢?
就定義上來(lái)說(shuō)最大的區(qū)別在于C和P,就構(gòu)架上來(lái)說(shuō),是View層實(shí)現(xiàn)的方式不同。
MVC:View層肩負(fù)很大任務(wù),View關(guān)聯(lián)Model,View的渲染是直接通過(guò)Model層的數(shù)據(jù)來(lái)確定的。還是有很多業(yè)務(wù)邏輯在View上完成。
MVP:View層的任務(wù)大大縮減,View不再知道Model,P層完成上面提到的View層完成的業(yè)務(wù)邏輯。
總之一句話MVP里,View層絕對(duì)不能再訪問(wèn)Model了,
任何一種設(shè)計(jì)模式的出現(xiàn)絕對(duì)不是為了出現(xiàn)而出現(xiàn)的??偸菫榱私鉀Q現(xiàn)實(shí)中存在的某些老的模式無(wú)法或難以解決的問(wèn)題才出現(xiàn)的。
為什么會(huì)出現(xiàn)MVP呢?
看看客戶拿到一個(gè)設(shè)計(jì)精良的MVC的產(chǎn)品,做二次開(kāi)發(fā)的時(shí)候,如果他項(xiàng)目足夠大,肯定會(huì)發(fā)現(xiàn)MVC的好處。任務(wù)集中在Model層,設(shè)計(jì)好Model層數(shù)據(jù)的填充,簡(jiǎn)單的實(shí)現(xiàn)就完成了。MVC的架構(gòu)幫他解決了很多問(wèn)題,大家很Happy!
當(dāng)然客戶的需求總是永無(wú)止境的,當(dāng)簡(jiǎn)單需求被滿足的時(shí)候,他又會(huì)往高層次發(fā)展,也許他就完全需要不同的View來(lái)做同樣的Model的展示(比如一個(gè)在JSP,一個(gè)在Swing或者Android上),在這個(gè)時(shí)候,稍微想下,他就發(fā)現(xiàn)他要做的任務(wù)開(kāi)始變的很大了。Model層的數(shù)據(jù)縱使可以共享,事件控制(轉(zhuǎn)發(fā))也能,而View層無(wú)論如何是逃不了了。于是Web程序員硬著頭皮也要學(xué)Swing,Swing的程序員郁悶的學(xué)JSP。
試想這個(gè)時(shí)候如果有個(gè)人,能把陷在View上的上萬(wàn)行code,拉到一個(gè)即能聯(lián)系到Model,又能聯(lián)系到View的層次上,那真的要感謝蒼天大地了。
MVP我想應(yīng)該就是在這個(gè)時(shí)候出現(xiàn)的。它處理所有View和Model之間的消息傳遞,數(shù)據(jù)更新,交互操作。比如從Swing的TextField里輸入個(gè)字段信息,和從JSP里的Form里輸入這個(gè)字段信息,處理的流程應(yīng)該是可以共享這段代碼的。當(dāng)然這個(gè)時(shí)候,為了解決不同View上的一些特殊情況,可以使用適配器模式,來(lái)處理多個(gè)View的程序設(shè)計(jì)問(wèn)題。
設(shè)計(jì)模式?jīng)]有好壞之分,只有合不合適。你的產(chǎn)品如果只需要輸入個(gè)A返回個(gè)B,沒(méi)有平臺(tái)建議,沒(méi)有系統(tǒng)升級(jí),那就忘了所有的設(shè)計(jì)模式,走那條最快實(shí)現(xiàn)的路吧。