为什么MVC不是23中设计模式之一?

背景

今天偶然又听到了这个讨论的话题,感觉非常有意思,拿来和大家一起分享一下。
   GoF (Gang of Four,四人组, 《Design Patterns: Elements of Reusable Object-Oriented Software》/《设计模式》一书的作者:Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides)并没有把MVC提及为一种设计模式,而是把它当做“一组用于构建用户界面的类集合”。在他们看来,它其实是其它三个经典的设计模式的演变:观察者模式(Observer)(Pub/Sub), 策略模式(Strategy)和组合模式(Composite)。根据MVC在框架中的实现不同可能还会用到工厂模式(Factory)和装饰器(Decorator)模式。

   正如我们所讨论的,models表示应用的数据,而views处理屏幕上展现给用户的内容。为此,MVC在核心通讯上基于推送/订阅模型(惊讶的是 在很多关于MVC的文章中并没有提及到)。当一个model变化时它对应用其它模块发出更新通知(“publishes”),订阅者 (subscriber)——通常是一个Controller,然后更新对应的view。观察者——这种自然的观察关系促进了多个view关联到同一个 model。

   对于感兴趣的开发人员想更多的了解解耦性的MVC(根据不同的实现),这种模式的目标之一就是在一个主题和它的观察者之间建立一对多的关系。当这个 主题改变的时候,它的观察者也会得到更新。Views和controllers的关系稍微有点不同。Controllers帮助views对不同用户的输 入做不同的响应,是一个非常好的策略模式列子。

小结:

所以,知道为什么MVC没有被GOF当作【一种】模式来对待了吧?因为它实际上是三种模式的合体!(如果以后有人问你这个问题,你可以直接引述上面这段话,绝对高端大气上档次!一下就能把TA给震住!)

最后聊聊为什么会有这个问题吧!其实是大家把框架、架构、设计模式这些概念搞混了。

框架:

  • 框架通常是代码重用,而设计模式是设计重用,架构则介于两者之间,部分代码重用,部分设计重用,有时分析也可重用。框架与设计模式虽然相似,但却有着根本的不同。

设计模式

  • 是对在某种环境中反复出现的问题以及解决该问题的方案的描述,它比框架更抽象;

不同之处

  • 框架可以用代码表示,也能直接执行或复用,而对模式而言只有实例才能用代码表示;
  • 设计模式是比框架更小的元素,一个框架中往往含有一个或多个设计模式
  • 框架总是针对某一特定应用领域,但同一模式却可适用于各种应用

  • 可以说,框架是软件,而设计模式是软件的知识。

框架模式有哪些?

MVC、MTV、MVP、CBD、ORM等等;

框架有哪些?

C++语言的QT、MFC、gtk,Java语言的SSH 、SSI,php语言的 smarty(MVC模式),python语言的django(MTV模式)等等

设计模式有哪些?

工厂模式、适配器模式、策略模式等等

总结:

框架是大智慧,用来对软件设计进行分工;设计模式是小技巧,对具体问题提出解决方案,以提高代码复用率,降低耦合度。

你可能感兴趣的:(●Web之旅,------【ASP.NET】,------【设计模式】)