MVC模式三层架构 你搞清楚了么

2024-02-03 12:59

本文主要是介绍MVC模式三层架构 你搞清楚了么,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

有人说MVC模式是表现层的架构模式,有人说MVC模式是三层架构的替代方案。那么这两者之间,究竟是什么关系呢?

是什么

三层架构

从概念上来说,三层架构是软件工程领域中的一种架构模式,将业务应用划分为:表现层,业务逻辑层,数据访问层。

表现层:提供交互界面,负责数据的输入与输出。
业务逻辑层:封装业务逻辑,接收表现层的请求,调用数据访问层对数据进行操作,在数据交换中起到承上启下的作用。
数据访问层:负责与数据库进行交互,实现数据的增删查改等操作。

图1 三层架构

MVC模式

MVC模式同样也是软件工程领域中的一种架构模式,由三部分组成,分别是:模型(Model)视图(View)控制器(Controller)。
三层架构在概念上来说是比较清晰的,但是MVC模式相对来说就有些争论了,下面将借助三层架构来解释一下MVC模式,加深我们对MVC模式的理解。

MVC模式&三层架构的关系

MVC模式和三层架构之间的关系存在不同的观点,这是由于对MVC的组成模块的功能理解不同导致的。

有一种观点认为MVC模式是三层架构的替代方案,并对各个模块的功能划分如下:

模型(Model):可以理解为领域模型(domain model),封装了业务数据和业务逻辑,此时的model对应三层架构中的业务逻辑层和数据访问层。
视图(View):提供交互界面,负责数据的展示。
控制器(Controller):负责流程控制,接收输入的数据,委托给相应的model处理,根据结果选择合适的view返回。

其中视图和控制器合起来对应三层架构中的表现层。

图2 MVC模式&三层架构 对应关系1

另一种观点则认为MVC模式是一种基于表现层的架构模式,区别在于对模型的理解不同,模型的定义如下所示:

模型(Model):此时的model是数据的载体,类似程序中view model的概念,是view和controller之间通信的载体

在这种观点中,视图,模型,控制器共同组成了三层架构中的表现层,可以认为是对三层架构中的表现层做了进一步的拆分。

图3 MVC模式&三层架构 对应关系2

通过图2和图3,可以直观的发现,两种观点的差异主要在于对模型的理解不同。如果将MVC模式看做是表现层的架构,其实是对模型做了一个比较狭义的解释,笔者更倾向于认为模型是领域模型的观点。

MVC模式是三层架构的替代方案?

如果将模型认为是领域模型,是否可以将MVC模式看做三层架构的替代方案呢?其实不然,因为在笔者看来,这两者其实是从不同角度对软件工程进行了抽象。

MVC模式强调数据和视图分离,将数据展示和数据处理分开,通过控制器对两者进行组合。

三层架构强调不同维度数据处理的高内聚和低耦合,将交互界面,业务处理和数据库操作的逻辑分开。

既然角度不同也就谈不上互相替代了,反而在日常的开发中可以经常看到两种共存的情况,比如我们设计模型层的时候往往也会拆分出业务逻辑层(service层)和数据访问层(DAO层)。

图4  MVC模式 流程处理

总结

MVC模式和三层架构分别从不同角度对软件工程进行了抽象,MVC强调数据和展示分离,三层架构强调不同维度数据处理的解耦。两者的目的是相同的,既通过对代码的合理组织,使程序的结构更加直观,降低代码耦合度,加强代码的可扩展性、可复用性、可维护性、灵活性。

公众号文章地址:https://mp.weixin.qq.com/s/Vv_xUYX-uhSo2i7JB4uCBA

这篇关于MVC模式三层架构 你搞清楚了么的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/674225

相关文章

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

Java异常架构Exception(异常)详解

《Java异常架构Exception(异常)详解》:本文主要介绍Java异常架构Exception(异常),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. Exception 类的概述Exception的分类2. 受检异常(Checked Exception)

SpringBoot如何通过Map实现策略模式

《SpringBoot如何通过Map实现策略模式》策略模式是一种行为设计模式,它允许在运行时选择算法的行为,在Spring框架中,我们可以利用@Resource注解和Map集合来优雅地实现策略模式,这... 目录前言底层机制解析Spring的集合类型自动装配@Resource注解的行为实现原理使用直接使用M

如何解决Spring MVC中响应乱码问题

《如何解决SpringMVC中响应乱码问题》:本文主要介绍如何解决SpringMVC中响应乱码问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring MVC最新响应中乱码解决方式以前的解决办法这是比较通用的一种方法总结Spring MVC最新响应中乱码解

Spring MVC使用视图解析的问题解读

《SpringMVC使用视图解析的问题解读》:本文主要介绍SpringMVC使用视图解析的问题解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring MVC使用视图解析1. 会使用视图解析的情况2. 不会使用视图解析的情况总结Spring MVC使用视图

基于@RequestParam注解之Spring MVC参数绑定的利器

《基于@RequestParam注解之SpringMVC参数绑定的利器》:本文主要介绍基于@RequestParam注解之SpringMVC参数绑定的利器,具有很好的参考价值,希望对大家有所帮助... 目录@RequestParam注解:Spring MVC参数绑定的利器什么是@RequestParam?@

C#原型模式之如何通过克隆对象来优化创建过程

《C#原型模式之如何通过克隆对象来优化创建过程》原型模式是一种创建型设计模式,通过克隆现有对象来创建新对象,避免重复的创建成本和复杂的初始化过程,它适用于对象创建过程复杂、需要大量相似对象或避免重复初... 目录什么是原型模式?原型模式的工作原理C#中如何实现原型模式?1. 定义原型接口2. 实现原型接口3

大数据spark3.5安装部署之local模式详解

《大数据spark3.5安装部署之local模式详解》本文介绍了如何在本地模式下安装和配置Spark,并展示了如何使用SparkShell进行基本的数据处理操作,同时,还介绍了如何通过Spark-su... 目录下载上传解压配置jdk解压配置环境变量启动查看交互操作命令行提交应用spark,一个数据处理框架

Spring MVC跨域问题及解决

《SpringMVC跨域问题及解决》:本文主要介绍SpringMVC跨域问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录跨域问题不同的域同源策略解决方法1.CORS2.jsONP3.局部解决方案4.全局解决方法总结跨域问题不同的域协议、域名、端口

Java实现状态模式的示例代码

《Java实现状态模式的示例代码》状态模式是一种行为型设计模式,允许对象根据其内部状态改变行为,本文主要介绍了Java实现状态模式的示例代码,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来... 目录一、简介1、定义2、状态模式的结构二、Java实现案例1、电灯开关状态案例2、番茄工作法状态案例