Posted on 2010-02-28 15:38
oathleo 阅读(2841)
评论(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,没有平台建议,没有系统升级,那就忘了所有的设计模式,走那条最快实现的路吧。