MVC是设计模式还是建筑模式


109

根据SunMsdn的说法,这是一种设计模式。

根据维基百科,这是一种建筑模式

与设计模式相比,建筑模式的规模更大。(维基百科- 建筑模式

还是具有设计模式的建筑模式?

哪一个是对的?


1
因为必须有一个正确的答案...
Mike G

根据Product Madness的Dave所说,MVC是一种设计模式,RobotLegs也是如此。:P
andygoestohollywood 2014年

Answers:


56

MVC更像是一种架构模式,而不是完整的应用程序。MVC主要涉及应用程序的UI /交互层。您仍然需要业务逻辑层,也许需要一些服务层和数据访问层。也就是说,如果您要使用n层方法。


16
是的,我想说MVC是您的Presentation层的架构模式。
murki 2010年

8
我强烈不同意“ MVC主要与应用程序的UI /交互层有关”。MVC中的“ M” /模型业务层,您可能希望将其分为多个层。
mewm

是的,这个答案是错误的。MVC绝对与UI /交互无关。您可以在前端和后端完美地拥有mvc,在一开始的视图中通常只是html / js或.jsp或.phtml,而服务器定义了控制器和模型。示例JSP(视图),JavaBeans(模型),Servlet(控制器)。与所有著名的php框架(交响乐,zend,蛋糕等)相同的概念。但是如今,前端框架看起来像后端应用程序,而现代的javascript框架则使用mvc(将视图html化,控制脚本并将js对象建模为实体)
amdev

40

为什么其中之一必须是真实的?

两者都可能是正确的,具体取决于观点。

如果MVC构成了应用程序体系结构的基础,则它可以是一种架构模式。

也可以将其简单地视为设计模式,这是适用于任何应用程序的抽象概念。


27

设计模式说明了如何有效地编写代码(考虑Code Metrics)。

一些好处:

  1. 易于维护
  2. 高度可重复使用
  3. 由于抽象而可读

建筑模式说明如何有效利用资源。

  1. 像程序员和图形设计师一样的并行任务执行可以并行工作。
  2. 可以利用多种技术来构建软件。

在MVC中, a)。可以使用javascript模板创建视图,也可以使用html b)。控制器可以编写为.NET Framework和 c)。模型可以用Java编写-可以使用仅返回json数据的java服务。

在设计模式中,无法实现使用多种技术编写代码的模式,例如Java中的AdminUser类,C#中的Customer类,Php中的Partners类以及Ruby中的工厂模式:);嗯..那么容易吗?


6

我知道它已经回答了一段时间,但是还没有人提到使MVC着称的那本书:由Buschmann等人于1996年出版的“面向模式的软件体系结构(POSA)”。由Gamma等人撰写,POSA是模式社区使用的基础书籍之一。

哦,POSA非常清楚地将MVC标识为一种架构模式。我的直觉是,MS和Sun只是草率,将每个模式都称为“设计模式”。


3

我认为两者都是对的。如果您正在Ruby on Rails之类的框架中查看MVC 的特定实例,则该实例更多是一种设计模式。如果您将MVC看作一个一般概念,那么它更多是一种架构模式。


3

类的“模型/视图/控制器”(MVC)内部的设计模式包括但不限于:

  • 观察者,解耦对象,以便对一个对象(模型)的更改可以影响任意数量的其他对象(视图),而无需更改的对象(模型)知道其他对象(视图)的详细信息。

  • Composite,它使我们可以像对待单个对象(视图组件)一样对待一个组对象(一个复合视图)。

  • 策略:视图使用Controller子类的实例来实现特定的响应策略;要实施不同的策略,只需将实例替换为其他类型的控制器即可。

  • Factory Method,指定视图的默认控制器类。

  • 装饰器,向视图添加滚动。


参考

  • 第4至6页(Smalltalk MVC中的1.2节设计模式)
  • 第293页至第304页(观察者设计模式)
  • 第163至174页(复合设计模式)
  • 315页至324页(策略设计模式)
  • 107至116页(“工厂方法”设计模式)
  • 第175页至第185页(装饰器设计模式)

Eric Gamma,Richard Helm,Ralph Johnson和John Vlissides。设计模式:可重用的面向对象软件的元素。Addison-Wesley,马萨诸塞州雷丁,1994年。


1
谢谢,所有其他答案都是错误的。这绝对不是“依赖于观点”,拥有数十或数百张选票不会说错什么。MVC本身并不是一种设计模式,它是一种使用您提到的多个设计模式在3层中构建代码的方法。所有在后台实现MVC的框架都使用Observable,Strategy和Composite模式的概念。理解MVC的最好方法是创建自己的实现,然后您将了解其背后的设计模式。
amdev


2

如果您将十个软件架构师放到一个房间里,让他们讨论Model-View-Controller模式是什么,您将最终得到十二种不同的见解。…那里的一些纯粹主义者不可避免地会对我所说的“ MVC”产生疑虑。随时在此网页底部的留言板上留下激烈的评论。对于MVC的含义,我将乐意接受不同的看法,但请记住,我不在乎。

乔什·史密斯


1

根据Martin Fowler的说法,它们是GUI架构:Martin Fowler-GUI架构

它取决于应用程序的大小,因为它仅影响与GUI相关的类,在一个很小的类(主要是GUI)中,可以将其视为一种架构模式,而在一个巨大的类中,它仅是您应用于GUI的一种设计模式。代码(可能是应用程序代码的10%)。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.