根据维基百科,它是一种架构模式
与设计模式相比,架构模式的规模更大。(维基百科-架构模式)
或者它是一种架构模式,也有设计模式?
哪一个是真的?
MVC 更多的是一种架构模式,但不是完整的应用程序。MVC 主要与应用程序的 UI / 交互层有关。你仍然需要业务逻辑层,也许是一些服务层和数据访问层。也就是说,如果您使用 n 层方法。
为什么其中之一必须是真的?
两者都可能是真的,这取决于观点。
MVC 可以是一种架构模式,如果它构成了应用程序架构的基础。
它也可以被视为一种简单的设计模式,一种适用于任何应用程序的抽象概念。
设计模式说明如何有效地编写代码(考虑Code Metrics)。
几个好处:
架构模式说明了如何有效地利用资源。
在 MVC 中, a)。可以使用 javascript 模板创建视图,也可以使用 html b)。控制器可以编写为 .NET 框架和 c)。模型可以用 Java 编写——可以使用只返回 json 数据的 java 服务。
在设计模式中,无法实现一种可以用多种技术编写代码的模式,例如 Java 中的 AdminUser 类、C# 中的 Customer 类、Php 中的 Partners 类和 Ruby 中的工厂模式 :);嗯..那么容易吗?:)
我知道它已经在不久前得到了回答,但是还没有人提到让 MVC 出名的书:Buschmann 等人于 1996 年出版的面向模式的软件架构 (POSA)。虽然不像设计模式这本书那样被广泛阅读,由 Gamma 等人撰写,POSA 是模式社区使用的基础书籍之一。
哦,POSA 非常清楚地将 MVC 识别为一种架构模式。我的预感是 MS 和 Sun 只是草率地把每种模式都称为“设计模式”。
模型/视图/控制器 (MVC) 三元组中的设计模式包括但可能不限于:
观察者,解耦对象,以便对一个(模型)的更改可以影响任意数量的其他对象(视图),而无需更改的对象(模型)知道其他对象(视图)的详细信息。
Composite,它让我们可以像对待一个单独的对象(视图组件)一样对待一个组对象(一个复合视图)。
策略,其中视图使用 Controller 子类的实例来实现特定的响应策略;要实现不同的策略,只需用不同类型的控制器替换实例即可。
Factory Method,指定视图的默认控制器类。
装饰器,添加滚动到视图。
参考
埃里克·伽马、理查德·赫尔姆、拉尔夫·约翰逊和约翰·弗利赛德斯。设计模式:可重用的面向对象软件的要素。Addison-Wesley,马萨诸塞州雷丁,1994 年。
我认为两者都是真的。如果您在 Ruby on Rails 之类的框架中查看 MVC 的特定实例化,则该实例化更像是一种设计模式。如果您将 MVC 视为一个通用概念,它更像是一种架构模式。
MVC 总是在软件架构书籍中作为/在表示层中提到和介绍。
阅读这些书籍:
为企业构建 Microsoft.NET 解决方案(微软出版社)
专业的 ASP.NET 设计模式(Wrox)
使用 Microsoft.NET 的企业解决方案模式(微软出版社)
企业应用架构模式(Addison Wesley)
企业架构实用指南(Prentice Hall)
如果你把十个软件架构师放在一个房间里,让他们讨论什么是模型-视图-控制器模式,你最终会得到 12 种不同的意见。......那里的一些纯粹主义者不可避免地会对我所说的“MVC”产生疑虑。随时在此网页底部的留言板上留下热情洋溢的评论。我很乐意对 MVC 的含义提出不同的看法,但请记住,我不在乎。
乔什·史密斯
根据 Martin Fowler 的说法,它们是 GUI 架构:Martin Fowler-GUI architectures
它取决于应用程序的大小,因为它只影响与 GUI 相关的类,在一个小的(主要是 GUI)中,它可以被认为是一种架构模式,而在一个巨大的中,它只是一种应用于 GUI 的设计模式代码(可能是应用程序代码的 10%)。
MVC 是架构模式。非常清楚地说明并显示在http://molecularsciences.org/zend/mvc_model_view_controller