My-Blog-Hexo/source/_posts/MVC模式和三层架构.md
2024-12-18 20:27:43 +08:00

79 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: MVC模式和三层架构
date: 2020-12-12 13:56:15
tags:
- JavaWeb
- MVC
- 三层架构
categories:
- JavaWeb
---
为了便于管理繁杂的代码以及降低代码的耦合性于是衍生出了MVC模式可以使开发者思路更加清晰且代码更加利于维护。
## MVC 模式
Web MVC中的M(模型)-V(视图)-C(控制器)概念和标准MVC概念一样Web MVC标准架构如下图所示
![image-20201126203504738](https://i.loli.net/2020/11/26/VAHzbtaiFC1yDc3.png)
<!--more-->
`M(Model) 模型` : 应用程序的核心功能,管理这个模块中用的数据和值,**包含Dao层和Bean层**
`V(View )视图`: 视图提供模型的展示,管理模型如何显示给用户,它是应用程序的外观,**一般指JSP或HTML前端页面**
`C(Controller)控制器`: 对用户的输入做出反应,管理用户和视图的交互,是连接模型和视图的枢纽。**包含Servlet层和Service层**
MVC用于将webUI层进行职责解耦
## 三层架构
通常意义上的三层架构就是将整个业务应用划分为:**表现层UI、业务逻辑层BLL、数据访问层DAL**。区分层次的目的即为了「高内聚,低耦合」的思想。
* 表现层UI通俗讲就是展现给用户的界面即用户在使用一个系统的时候他的所见所得。 jsp/html
* 业务逻辑层BLL针对具体问题的操作也可以说是对数据层的操作对数据业务逻辑处理。
servletservice
* 数据访问层DAL该层所做事务直接操作数据库针对数据的增添、删除、修改、更新、查找等。dao
> 表现层实现的代表作品是Strutsspringmvc框架
>
> 业务层实现的代表作品是Spring
>
> 持久层实现的代表作品是Hibernate,mybatis。
层就相当于一个黑盒子,我们不用知道它内部怎么实现,只需要知道如何去调用它就行了。每层只与上下相邻的两层打交道。当一层内部由于技术变迁发生变化时,只要接口不变,其他层不用做任何改变。分层之后灵活性提高,也便于团队分工开发。
## 三层架构和MVC的区别与联系
![](https://i.loli.net/2020/11/26/A95vVS3qPnzY82y.jpg)
MVC是 Model-View-Controller严格说这三个加起来以后才是三层架构中的UI层也就是说MVC把三层架构中的UI层再度进行了分化分成了控制器、视图、实体三个部分控制器完成页面逻辑通过实体来与界面层完成通话而C层直接与三层中的BLL进行对话。
MVC可以是三层中的一个表现层框架属于表现层。三层和mvc可以共存。
三层是基于业务逻辑来分的而MVC是基于页面来分的。
MVC主要用于表现层三层主要用于体系架构三层一般是表现层、中间层、数据层其中表现层又可以分成M、V、C(Model View Controller)模型-视图-控制器
MVC是表现模式Presentation Pattern三层架构是典型的架构模式Architecture Pattern
三层架构的分层模式是典型的上下关系上层依赖于下层。但MVC作为表现模式是不存在上下关系的而是相互协作关系。即使将MVC当作架构模式也不是分层模式。
MVC和三层架构基本没有可比性是应用于不同领域的技术。
> [https://www.cnblogs.com/zhhh/archive/2011/06/10/2077519.html](https://www.cnblogs.com/zhhh/archive/2011/06/10/2077519.html)这篇文章对MVC和三层的关系是这样说的
>
> **三层是三层MVC是MVC它们毫无关系的。**
>
> **三层**是从整个应用程序架构的角度来分的三层(如果程序需要,还可以分多层)。
>
> 三层是为了解决整个应用程序中各个业务操作过程中不同阶段的代码封装的问题,为了使程序员更加专注的处理某阶段的业务逻辑。
>
> 比如将数据库操作代码封装到一层中,提供一些方法根据参数直接返回用户需要的相应数据,这样在处理具体的业务逻辑的时候,就不用关心数据的存储问题了。
>
> **MVC**是在应用程序BS结构的视图层划分出来的不同功能的几个模块。
>
> MVC主要是为了解决应用程序用户界面的样式替换问题把展示数据的 HTML 页面尽可能的和业务代码分离。MVC把纯净的界面展示逻辑用户界面独立到一些文件中Views把一些和用户交互的程序逻辑Controller单独放在一些文件中在 Views 和 Controller 中传递数据使用一些专门封装数据的实体对象这些对象统称为Models。
>
> 之所以说MVC和三层毫无关系是因为它们二者使用范围不同三层可以应用于任何语言、任何技术的应用程序而MVC只是为了解决BS应用程序视图层各部分的耦合关系。它们互不冲突可以同时存在也可根据情况使用其中一种。