MVC架构模式与三层架构

提示:博客中的图片来源于动力节点在B站的视频讲解。

一、三层架构

  • 三层架构是指:视图层view(表现层)服务层service(业务逻辑层)持久层Dao(数据访问层)
    • 表现层(UI):直接跟前端打交互(⼀是接收前端ajax请求,⼆是返回json数据给前端)
    • 业务逻辑层(BLL):⼀是处理表现层转发过来的前端请求(也就是具体业务),⼆是将从持久层获
      取的数据返回到表现层。
    • 数据访问层(DAL):负责数据库的访问(可以访问数据库、二进制文件、文本文件等),是对数据库,而不是对数据的操作。直接操作数据库完成CRUD,并将获得的数据返回到上⼀层(也就是业务逻辑层)。
      动力节点老杜-MyBatis讲义中的图片
  • 三层架构的出现是为了降低耦合度,在这里,使用面向抽象编程,也就是上层对下层的调用,直接通过接口来完成,下层对上层的真正服务提供者,是下层实现的接口实现类。实现类是可以更换的,这就实现了层间的解耦合。
  • 实际项目中的包命名结构,其实就是三层架构的体现:
    在这里插入图片描述

二、MVC(model view controller)

  • MVC是软件工程中的一种软件架构模式,它是一种分离业务逻辑与显示界面的设计方法,它把软件系统分为三个基本部分:模型(model)、视图(view)、控制器(controller)
    • 控制器 controller:对请求进行处理,负责请求转发,也就是事件,用于流程的控制;
    • 视图view:界面设计人员进行图形界面设计,也就是GUI组件,用于数据的展示;
    • 模型model:编写程序应用功能(实现算法等等),数据库管理,也就是实体类。用于数据的封装和数据的传输; model一般分为以下两类:
      • 数据承载bean,数据承载bean是指实体类专门承载业务数据的,比如Student,User等。
      • 业务承载bean,业务处理bean是指Service或者Dao对象,专门处理用户的请求的。
        动力节点老杜-JavaWeb中的图片

1.MVC 框架的工作流程

  • 用户通过 View 页面向服务端提出请求,可以是表单请求、超链接请求、AJAX请求等。
  • 服务端 Controller 控制器接收到请求后对请求进行解析,找到相应的 Model(Service和Dao)对用户请求进行处理。
  • Model 处理后,将处理结果再交给 Controller。
  • Controller 在接到处理结果后,根据处理结果找到要作为向客户端发回的响应View页面。页面经渲染(数据填充)后,再发送给客户端。
    在这里插入图片描述

(1)JSP + Servlet + javabean实现MVC。

在这里插入图片描述

(2)SSM(Spring、SpringMVC、MyBatis)

  • SSM,即 SpringMVC、Spring 与 MyBatis 三个框架。
  • 它们在三层架构中所处的位置是不同的,即它们在三层架构中的功能各不相同,各司其职。
    • SpringMVC:作为 View 层的实现者,完成用户的请求接收功能。SpringMVC 的 Controller作为整个应用的控制器,完成用户请求的转发及对用户的响应。Spring MVC是主流的Web框架。
    • MyBatis:作为 Dao 层的实现者,完成对数据库的增、删、改、查功能
    • Spring:以整个应用大管家的身份出现。整个应用中所有 Bean 的生命周期行为,均由Spring 来管理。即整个应用中所有对象的创建、初始化、销毁,及对象间关联关系的维护,均由 Spring 进行管理。
      在这里插入图片描述

三、三层架构与MVC的关系

  • MVC 是在三层架构的基础上设计的一种框架型架构,三层架构是一种宏观的概念,而 MVC 就是一种比较具体的三层架构的框架实现。
  • 它们二者使用范围不同:三层可以应用于任何语言、任何技术的应用程序;而MVC只是为了解决B-S应用程序视图层各部分的耦合关系。它们互不冲突,可以同时存在,也可根据情况使用其中一种。
  • 之所以我们会混淆,是因为在进行web开发时两者会同时使用。
    • 在三层架构设计中,表示层可由MVC设计模式中的视图(view)和控制器(controller)来实现,而业务逻辑层和数据访问层则组成MVC设计模式中的模型(Model)的实现。
    • 因此,在实际的应用中,都是采用三层架构来搭建系统的框架,而表示层与业务逻辑层和数据访问层的交互则是通过MVC设计模式来实现。

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-01-26 21:30:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-26 21:30:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-26 21:30:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-26 21:30:02       18 阅读

热门阅读

  1. centos更换国内yum下载源

    2024-01-26 21:30:02       28 阅读
  2. 编程笔记 html5&css&js 053 CSS伪元素

    2024-01-26 21:30:02       36 阅读
  3. C++Linux网络编程Day1

    2024-01-26 21:30:02       33 阅读
  4. CentOS7离线安装supervisor

    2024-01-26 21:30:02       34 阅读
  5. ctfshow-命令执行

    2024-01-26 21:30:02       40 阅读
  6. 使用HyperLogLog统计网站uv

    2024-01-26 21:30:02       29 阅读
  7. 微信小程序打卡定位实现方案

    2024-01-26 21:30:02       36 阅读
  8. 《More Effective C++》《效率——16、谨记80-20法则》

    2024-01-26 21:30:02       33 阅读
  9. R语言【taxlist】——clean_strings():清理字符串

    2024-01-26 21:30:02       33 阅读
  10. 深度学习简介与应用

    2024-01-26 21:30:02       34 阅读