咖啡伴侣

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

MVC与MVP

Posted on 2010-02-28 15:38 oathleo 阅读(2836) 评论(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层的出现就可以解决这个问题。

只有注册用户登录后才能发表评论。


网站导航: