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 是设计模式还是架构模式的主要内容,如果未能解决你的问题,请参考以下文章