MVC到底是设计模式还是软件架构?

简介: MVC到底是设计模式还是软件架构?


前言

昨天在发布MVC的博客后,有位小伙伴私信我,MVC到底是设计模式还是软件架构?这一下子给我问住了,想了很久,终于想通了。在回答这个问题之前,我想我们得明确设计模式和软件架构的概念,顺便介绍一下软件开发中的另一个常见名词——框架

一、软件架构

1.1 概念

软件架构是一个系统的蓝图,它包括多个方面,如系统的结构、行为、用户界面、组件、数据等。软件架构定义了系统的主要组成部分以及这些部分之间的交互。它是在系统设计阶段确定的,并在整个系统的生命周期中起着关键作用。

1.2 作用

软件架构的主要作用是为系统的设计和实现提供一个基础框架。它定义了系统的主要组成部分以及这些部分之间的交互。软件架构可以帮助我们理解系统的高级结构,并可以指导系统的实现和维护。软件架构的抽象级别最高,它关注的是整个系统的大局

1.3 常见的软件架构(部分)

1.3.1 MVVM(Model-View-ViewModel)

MVVM是一种特别适用于图形用户界面的架构,它将应用程序分为模型、视图和视图模型三个部分。

13.2 微服务架构

在微服务架构中,应用程序被分解为一组小的、独立的服务,每个服务都可以独立地开发和部署。

二、设计模式

2.1 概念

设计模式是在面向对象软件设计中常见的、已经被证明有效的设计解决方案。设计模式可以解决在软件设计中经常出现的特定问题,它们是经验的总结,可以帮助设计者避免一些常见的错误。设计模式通常比软件架构更具体,更低级别,它们通常用于解决在特定上下文中的特定问题

2.2 作用

设计模式的主要作用是提供解决常见设计问题的模板。设计模式可以帮助我们提高设计的效率和质量。设计模式的抽象级别比软件架构低,它关注的是在特定上下文中的特定问题

2.3 常见的设计模式(部分)

2.3.1 单例模式

单例模式确保一个类只有一个实例,并提供一个全局访问点。

2.3.2 工厂模式

工厂模式提供了一个创建对象的接口,但允许子类决定实例化哪一个类

三、框架

3.1 概念

框架是一种特殊的软件,它为开发特定类型的应用程序提供了一个基础结构。框架通常包括代码库、工具集和方法,可以帮助开发者更快、更容易地开发软件。框架通常实现了一些特定的设计模式和架构。

3.2 作用

框架的主要作用是为开发特定类型的应用程序提供一个预先定义好的结构。框架可以帮助我们快速开发软件,提高开发的效率。框架的抽象级别比设计模式低,它通常实现了一些特定的设计模式和架构

3.3 常见的框架(部分)

3.3.1 Spring

Spring是一个开源的Java框架,它提供了一系列的服务,如依赖注入、事务管理、安全性等。

3.3.2 React

React是一个开源的JavaScript库,它主要用于构建用户界面,特别是单页面应用程序。虽然React本身不是一个完整的框架,但它常常被用作开发复杂Web应用程序的基础。


总的来说,软件架构、设计模式和框架的主要区别在于它们的抽象级别和关注点。软件架构关注的是整个系统的结构,设计模式关注的是特定的设计问题,而框架则是为开发特定类型的应用程序提供的工具。

四、理解软件架构、设计模式和框架的区别

举个例子(建造一座房子)

让我们建造一座房子用来作为比喻

软件架构——蓝图

这就像房子的蓝图,它规定了房子的整体结构,包括房间的数量、位置、大小,以及房间之间的连接方式。这个蓝图决定了房子的基本形状和功能。

设计模式——设计解决方案

这就像建房子中的一些常见的设计解决方案,例如,厨房通常会靠近餐厅,卧室通常会有一个靠近的浴室。这些设计模式是根据人们的生活习惯和需求总结出来的,它们可以帮助我们更好地设计房子。

框架——房屋部件

这就像预制的房屋部件,例如预制的墙壁、门窗、楼梯等。这些预制部件已经按照一定的设计模式和架构制造好了,我们只需要将它们组装起来,就可以快速地建造出一座房子。


在这个比喻中,软件架构就像房子的蓝图,它规定了软件的整体结构。设计模式就像建筑行业的设计解决方案,它们可以帮助我们更好地设计软件。而框架就像预制的房屋部件,它们可以帮助我们快速地开发软件。

五、MVC到底是设计模式还是软件架构?

MVC既是一种设计模式,也是一种软件架构。

当我们将MVC视为设计模式时

我们通常关注的是它如何解决特定的设计问题,例如如何将数据和用户界面分离,如何协调用户输入和数据处理等。在这种情况下,MVC是一种解决特定问题的模板或者说是一种设计的最佳实践。

当我们将MVC视为软件架构时

我们通常关注的是它如何定义整个系统的高级结构。在这种情况下,MVC是一种规定了系统主要组成部分以及这些部分之间交互的框架。

拿建房子举例

从软件架构的角度:

MVC就像房子的蓝图。蓝图规定了房子的整体结构,包括房间的数量、位置、大小,以及房间之间的连接方式。在MVC中:

  • 模型(Model)就像房子的基础设施,比如电线、管道和支撑结构。这些都是房子运行的基础,对应于应用程序中处理数据和业务逻辑的部分。
  • 视图(View)就像房子的装饰,比如墙纸、窗帘和家具。这些都是用户可以看到和交互的部分,对应于应用程序中用户界面的部分。
  • 控制器(Controller)就像房子的布线系统,比如开关和电路板。这些都是用户可以操作的部分,对应于应用程序中处理用户输入的部分。

从设计模式的角度:

MVC就像建筑行业中的一些常见的设计解决方案。这些设计模式是根据人们的生活习惯和需求总结出来的,它们可以帮助我们更好地设计房子。在MVC中:

  • 模型(Model)就像设计解决方案中的功能区域,比如厨房、卧室和浴室。这些都是房子的功能部分,对应于应用程序中处理数据和业务逻辑的部分。
  • 视图(View)就像设计解决方案中的布局和装饰,比如墙纸的颜色、家具的摆放和窗帘的样式。这些都是用户可以看到和感受的部分,对应于应用程序中用户界面的部分。
  • 控制器(Controller)就像设计解决方案中的用户交互部分,比如开关的位置、门的开关方式和电器的操作方式。这些都是用户可以操作的部分,对应于应用程序中处理用户输入的部分。

总结:MVC既是设计模式,也是软件架构,这取决于我们从哪个角度来看待它。

好啦,本篇博客就到此为止!希望你看完本篇文章有所收获,祝你变得更强!!!

目录
相关文章
|
2月前
|
设计模式 前端开发 数据库
哇塞!Rails 的 MVC 架构也太牛了吧!快来看看这令人惊叹的编程魔法,开启新世界大门!
【8月更文挑战第31天】《Rails中的MVC架构解析》介绍了Ruby on Rails框架核心的MVC设计模式,通过模型(Model)、视图(View)和控制器(Controller)三部分分离应用逻辑,利用Active Record进行数据库操作,ERB模板渲染视图,以及控制器处理用户请求与业务逻辑,使代码更易维护和扩展,提升团队开发效率。
47 0
|
21天前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
178 37
|
3月前
|
设计模式 前端开发 数据库
深入理解MVC设计模式:构建高效Web应用程序的基石
【7月更文挑战第4天】在软件工程领域,设计模式是解决常见问题的一系列经过验证的方法。其中,Model-View-Controller(MVC)设计模式自诞生以来,便成为了构建用户界面,特别是Web应用程序的黄金标准。MVC通过将应用程序逻辑分离为三个核心组件,提高了代码的可维护性、可扩展性和重用性。本文将深入探讨MVC设计模式的原理,并通过一个简单的代码示例展示其应用。
71 0
|
1月前
|
设计模式 前端开发 数据库
理解mvc架构
mvc架构
18 4
|
2月前
|
设计模式 存储 前端开发
MVC革命:如何用一个设计模式重塑你的应用架构,让代码重构变得戏剧性地简单!
【8月更文挑战第22天】自定义MVC(Model-View-Controller)设计模式将应用分为模型、视图和控制器三个核心组件,实现关注点分离,提升代码可维护性和扩展性。模型管理数据和业务逻辑,视图负责数据显示与用户交互,控制器处理用户输入并协调模型与视图。通过示例代码展示了基本的MVC框架实现,可根据需求扩展定制。MVC模式灵活性强,支持单元测试与多人协作,但需注意避免控制器过度复杂化。
27 1
|
2月前
|
开发者 前端开发 Java
架构模式的诗与远方:如何在MVC的田野上,用Struts 2编织Web开发的新篇章
【8月更文挑战第31天】架构模式是软件开发的核心概念,MVC(Model-View-Controller)通过清晰的分层和职责分离,成为广泛采用的模式。随着业务需求的复杂化,Struts 2框架应运而生,继承MVC优点并引入更多功能。本文探讨从MVC到Struts 2的演进,强调架构模式的重要性。MVC将应用程序分为模型、视图和控制器三部分,提高模块化和可维护性。
36 0
|
2月前
|
存储 前端开发 数据库
神秘编程世界惊现强大架构!Web2py 的 MVC 究竟隐藏着怎样的神奇魔力?带你探索实际应用之谜!
【8月更文挑战第31天】在现代 Web 开发中,MVC(Model-View-Controller)架构被广泛应用,将应用程序分为模型、视图和控制器三个部分,有助于提高代码的可维护性、可扩展性和可测试性。Web2py 是一个采用 MVC 架构的 Python Web 框架,其中模型处理数据和业务逻辑,视图负责呈现数据给用户,控制器则协调模型和视图之间的交互。
28 0
|
3月前
|
存储 前端开发 算法
MVC(Model-View-Controller)架构
MVC架构帮助开发者构建清晰、可维护和可扩展的Web应用程序。
28 2
|
3月前
|
设计模式 存储 运维
微服务架构中的服务发现与注册中心设计模式
在现代软件工程实践中,微服务架构已成为构建灵活、可扩展系统的首选方案。本文将深入探讨微服务架构中至关重要的服务发现与注册中心设计模式。我们将从服务发现的基本原理出发,逐步解析注册中心的工作机制,并以Eureka和Consul为例,对比分析不同实现的优劣。文章旨在为开发者提供一套清晰的指导原则,帮助他们在构建和维护微服务系统时做出更明智的技术选择。
|
3月前
|
设计模式 监控 Java
探索微服务架构的弹性设计模式
【7月更文挑战第19天】在现代后端开发中,微服务架构因其灵活性、可扩展性而受到企业的青睐。本文将深入探讨微服务架构中的弹性设计模式,包括其定义、重要性以及如何通过技术手段实现服务的高可用性和容错性。我们将通过实例分析,展示如何在微服务系统中应用这些模式以提高系统的整体稳定性和响应能力。
49 1
下一篇
无影云桌面