前言
昨天在发布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既是设计模式,也是软件架构
,这取决于我们从哪个角度来看待它。
好啦,本篇博客就到此为止!希望你看完本篇文章有所收获,祝你变得更强!!!