MVC 是设计模式还是架构模式

Posted

技术标签:

【中文标题】MVC 是设计模式还是架构模式【英文标题】:Is MVC a Design Pattern or Architectural pattern 【发布时间】:2010-12-24 10:06:35 【问题描述】:

根据Sun和Msdn,这是一种设计模式。

根据Wikipedia,这是一种架构模式

与设计模式相比,架构模式的规模更大。 (***-Architectural pattern)

还是一种架构模式也有设计模式?

哪一个是真的?

【问题讨论】:

因为必须有一个正确的答案... 根据 Product Madness 的 Dave 所说,MVC 是一种设计模式,RobotLegs 也是如此。 :P 【参考方案1】:

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

【讨论】:

是的,我想说 MVC 是您的表示层的架构模式。 我强烈反对“MVC 主要与应用程序的 UI / 交互层相关”。 MVC 中的“M”/model 业务层,您可能希望将其拆分为多个层。 是的,这个答案是错误的。 MVC 绝对不是关于 UI / 交互的。您可以在前端和后端完美地拥有 mvc,一开始的视图通常只是一个 html/js 或 .jsp 或 .phtml 并且服务器定义控制器和模型。示例 JSP(视图)、JavaBeans(模型)、Servlet(控制器)。与所有著名的 php 框架(symphony、zend、cake 等)相同的概念。但是现在的前端框架看起来像后端应用程序和现代 javascript 框架使用 mvc(html 你的视图,控制器你的脚本,并将你的 js 对象建模为实体)【参考方案2】:

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

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

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

它也可以被视为一种简单的设计模式,一种适用于任何应用程序的抽象概念。

【讨论】:

【参考方案3】:

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

一些好处:

    易于维护 高可重用性 由于抽象而可读

架构模式说明如何有效利用资源。

    程序员和图形设计师这样的并行任务执行可以并行工作。 可以使用多种技术来构建软件。

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

在设计模式中,无法实现的模式 代码可以用多种技术编写,例如 Java 中的 AdminUser 类, C# 中的客户类、Php 中的合作伙伴类和 Ruby 中的工厂模式 :);嗯..那么容易吗?:)

【讨论】:

【参考方案4】:

我知道它已经在不久前得到了回答,但还没有人提到让 MVC 出名的书:Buschmann 等人于 1996 年出版的面向模式的软件架构 (POSA)。 Gamma 等人的设计模式书,POSA 是模式社区使用的基础书籍之一。

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

【讨论】:

【参考方案5】:

模型/视图/控制器 (MVC) 三元组中的设计模式包括但可能不限于:

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

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

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

工厂方法,指定视图的默认控制器类。

装饰器,为视图添加滚动功能。


参考

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

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

【讨论】:

谢谢,所有其他答案都是错误的。这绝对不是“取决于一个观点”,拥有数十或数百张选票不会使错误成为现实。 MVC 本身并不是一种设计模式,它是一种使用您提到的多个设计模式在 3 层中构建代码的方法。所有在后台实现 MVC 的框架都使用了 Observable、Strategy 和复合模式的概念。了解 MVC 的最佳方式是创建自己的实现,然后您将了解其背后的设计模式。【参考方案6】:

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

【讨论】:

【参考方案7】:

MVC 总是在软件架构书籍中作为/在表示层中提及和介绍。

阅读这些书籍:

    Architecting Microsoft.NET Solutions for the Enterprise(微软出版社)

    Professional ASP.NET design patterns (Wrox)

    Enterpise Solutions Patterns Using Microsoft.NET(微软出版社)

    Patterns of Enterprise Application Architecture(艾迪生韦斯利)

    A Practical Guide to Enterprise Architecture(普伦蒂斯·霍尔)

【讨论】:

为什么有 2 个答案?您可以将此答案添加为第一个答案的附加说明【参考方案8】:

如果您将十位软件架构师放在一个房间里,让他们讨论什么是模型-视图-控制器模式,您最终会得到 12 种不同的意见。 ......那里的一些纯粹主义者不可避免地会对我所说的“MVC”产生疑虑。随时在此网页底部的留言板上留下热情洋溢的评论。我很乐意对 MVC 的含义提出不同的看法,但请记住,我不在乎。

乔什·史密斯

【讨论】:

【参考方案9】:

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

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

【讨论】:

【参考方案10】:

MVC 是架构模式。非常清楚地说明并显示在http://molecularsciences.org/zend/mvc_model_view_controller

【讨论】:

此链接现已离线。

以上是关于MVC 是设计模式还是架构模式的主要内容,如果未能解决你的问题,请参考以下文章

三层架构 是设计模式吗

asp.net core 中的 MVC 架构模式

框架模式:MVC、MVP、MVVM、MVPVM

架构模式:MVC与MVVM

三层架构和mvc模式有啥关系

基础 | 三层架构与MVC模式