MVC三层架构详解

2023-05-16

文章目录

  • MVC三层架构详解
  • 一、MVC是什么?
    • 1.什么是低耦合?
    • 2.低耦合有什么好处?
    • 3.增加代码复用率
    • 4.部署快,且生命周期成本低
    • 5.可维护性高
  • 二、MVC详解
    • 1.MVC经典模式
    • 2.MVC设计模式和MVC框架的区别


MVC三层架构详解

本文详细介绍MVC三层架构


一、MVC是什么?

MVC实际是一种软件构件模式。它被设计的目的是为了降低程序开发中代码业务的耦合度。并且实现高重用性。增加代码复用率。部署快,且生命周期成本低,可维护性高也是MVC模式的特点。

1.什么是低耦合?

举个简单的例子:

从学程序之初,听到很多遍的一个名词就是低耦合。为什么一定要强调低耦合?我曾经听到过一个这样的说法,对于编程人员来说,喜欢米饭大于喜欢面条。为什么这么说呢,是因为面条经常是拌着卤汁吃,卤汁和面混淆在一起,你只能选择吃或者不吃。即使你不喜欢这个卤汁,你也无法把面条和卤汁一分为二,再换一个口味的卤汁过来。而米饭则不会有这种限制,因为米饭和菜往往是分开放的,即使你不喜欢吃面前的菜,那你完全可以换一个菜来吃。这就是低耦合。

2.低耦合有什么好处?

初学者往往不能体会到低耦合的好处,很难理解低耦合对于程序开发的重要性。

低耦合的好处在于,程序在开发中对于业务进行分层,各司其职,互不干扰,但又紧密结合,互相依赖。这样,无论是后期的调试,维护,还是二次开发,都能带来极大的便利。学过计算机网络的人应该知道TCP/IP协议,它把不同网络之间传输信息的过程从上到下分为四个层次,四个层次分别对不同的功能提供服务,可以说它们之间的业务是互不相干的。但是他们四个层次组合在一起才构成了整个TCP/IP协议,才实现了不同计算机之间的通信,四个层次缺一不可。假设现在想要对某个层次的功能进行扩充,那么我只需要去找到这一层就行,而不需要去改动整个四层模型。同样的道理,放在程序开发中也是一样的。低耦合的开发模式往往需要对整个业务实现分层开发,这样即使后期调试的时候发现了问题,那么问题出现在哪一层是非常清晰可见的。我们可以直接去找到该层进行二次调试,查找BUG。如果要扩展功能也只需要在各个层次之间添加上实现新功能的业务即可。如果不采用这种低耦合的分层开发,试想一下,所有的代码都放在一个Java文件当中,稍微复杂一点的项目都可能要几万十几万行代码。那么如果项目出了BUG该怎么在这十几万行代码中精准的找到错误将是一个巨大的工作量。而对于分层开发的项目来说,每个业务逻辑都清晰可见。那么调试和维护,以及二次开发时就大大减少了不必要的麻烦。

3.增加代码复用率

学习编程最初至今,你应该总会听到代码复用率这个名词。那么MVC是怎么实现增加代码复用率的?其实很好理解,假设现在车子的轮胎爆掉了,那么要去修理的话最多只需要换一个配套的轮胎,配套的轮胎很好找,因为车企总是有很多代工厂去生产这些配件。也有很多的汽修店可以满足我们的需要,我们不必再专门自己造一个轮胎。对于开发中的增强代码复用来说原理是类似的,因为我们使用了分层开发,那就意味着,别人造好的轮子,写好的方法,我只需要引进来就可以使用了,就不必再亲自实现这些方法。例如你现在写了一个登陆功能,写了SQL语句,要根据用户名和密码查询。那么在后台管理的时候,我们可能需要对用户信息进行列表展示。那么这个方法完全可以复用,实际开发中,显示所有信息和模糊查询信息往往都是只有一个方法来实现。而不是一个功能一个方法。这样就实现了代码的复用。

4.部署快,且生命周期成本低

MVC使开发和维护用户接口的技术含量降低。使用MVC模式使开发时间得到相当大的缩减,它使程序员(Java开发人员)集中精力于业务逻辑,界面程序员(HTML和JSP开发人员,前端工程师)集中精力于表现形式上。即,真正意义上实现了前后端分离开发。实现专业的人员干专业的工作,大大缩短开发周期。

5.可维护性高

分离视图层和业务逻辑层也使得WEB应用更易于维护和修改。


二、MVC详解

1.MVC经典模式

M:

在经典MVC模式中,M代表的是模型,表示的是业务规则。在项目开发中,M代表的是实体模型,和service服务层,以及对数据库进行操作的dao层和它的实现类daoimpl层

V:

在经典模式中,V代表的是视图层,即直接和用户进行交互操作的页面就是视图层,无论是MVC经典模式还是在框架中(例如:SpringMVC),V的定义一直是最清晰直观的。在Servvlet-JSP技术开发中,V就代表的是JSP页面。

C:

C代表的是控制层,即控制请求转发和响应的层次。在经典MVC开发模式中C就是Servlet,它决定了我们的视图层传过来的数据和请求要传给业务层的哪一个方法来实现,并负责获得业务层处理请求完之后的返回值传回前端。在MVC框架中,C往往是Controller来充当。

2.MVC设计模式和MVC框架的区别

需要注意的是,MVC设计模式和MVC框架并不相同,初学者往往会觉得MVC就囊括了MVC框架。其实不然。
区别:

框架通常是代码重用,而设计模式是设计重用,架构则介于两者之间,部分代码重用,部分设计重用,有时分析也可重用。

框架与设计模式虽然相似,但却有着根本的不同。设计模式是对在某种环境中反复出现的问题以及解决该问题的方案的描述,它比框架更抽象;框架可以用代码表示,也能直接执行或复用,而对模式而言只有实例才能用代码表示;设计模式是比框架更小的元素,一个框架中往往含有一个或多个设计模式,框架总是针对某一特定应用领域,但同一模式却可适用于各种应用。可以说,框架是软件,而设计模式是软件的知识。

根据天极网资料显示:基于Web的MVC framework在J2EE的世界内已是空前繁荣,TTS网站上几乎每隔一两个星期就会有新的MVC框架发布,比较好的MVC,老牌的有Struts、Webwork。新兴的MVC 框架有Spring MVC、Tapestry、JSF等。这些大多是著名团队的作品,另外还有一些边缘团队的作品,也相当出色,如Dinamica、VRaptor等,这些框架都提供了较好的层次分隔能力,在实现良好的MVC 分隔的基础上,通过提供一些现成的辅助类库,同时也促进了生产效率的提高。 ----------《百度百科》


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MVC三层架构详解 的相关文章

  • xxl-job(2.4.1)使用spring-mvc替换netty的功能

    xxl job 2 4 1 使用spring mvc替换netty的功能 1 xxl job core引入spring mvc的依赖
  • 自定义MVC框架原理

    目录 一 什么是MVC 1 模型 Model 2 视图 View 3 控制器 Controller 二 自定义mvc核心思想 三 自定义MVC的核心原则 四 三层架构和MVC的区别 1 结构层次不同 2 重点关注不同 3 强调的功能不同 4
  • Qt的MVC模型/视图编程(一)——理论知识

    一 为什么需要MVC模型 视图 MVC模型 视图架构是用于实现对大量数据的存储 处理及其显示 如下图所示 没用MVC存储数据的是图片中的上半部分 用了MVC处理数据后的是图片的下半部分 1 MVC模型 视图的作用 a 模型 数据 与视图 显
  • QTableView的表格项中加入图标的方法

    当在使用表格视图的时候 需要在表格每一行前面加入图标 应该怎么做呢 Qt中通过使用MVC的处理方式 很容易做到这一点 具体实现如下 先贴出图 让大家一睹为快 下面我就来介绍一下 上图的灯泡是怎么实现的 通过重载QAbstractTableM
  • 关于ASP.NET MVC与.NET CORE 的区别--小结

    简述关于ASP NET MVC与 NET CORE的区别 1 关于ASP NET 关于MVC 刚开始接触这个技术的时候我经常不理解他们的名字 我相信许多学ASP NET开发人员开始接触MVC应该也和我一样产生很多为什么 也会误认为认为MVC
  • mvc三层架构(用户信息管理系统)

    mvc三层架构 实战项目 用户信息管理系统 一 三层架构 View 层 用于接收用户提交请求的代码 Service 层 系统的业务逻辑主要在这里完成 Dao 层 直接操作数据库的代码 二 三层架构图 三 用户信息管理系统 利用MVC三层架构
  • JSP&EL表达式&MVC&三层结构综合案例

    文章目录 JSP 1 JSP 概述 2 JSP 快速入门 2 1 搭建环境 2 2 导入 JSP 依赖 2 3 创建 jsp 页面 2 4 编写代码 2 5 测试 3 JSP 原理 4 JSP 脚本 4 1 JSP 脚本分类 4 2 案例
  • mybatis的熟练运用以及反射知识讲解

    JSP常用设计模式MVC模式 Mybatis mybatis的使用 我们在写项目的时候必定要写DAO 写DAO的时候不难发现对每张表的DAO都差不多 只是sql语句不同 DAO中的每个方法其实也差不多 所以直接用JDBC写DAO是在太麻烦
  • 狂神说SpringMVC 最全学习笔记

    SpringMVC 1 回顾MVC 1 1 什么是MVC MVC是模型 Model 视图 Views 控制器 Controller 得缩写 是一种软件设计规范 是将业务逻辑 数据 显示分离得方法组织代码 MVC主要作用是降低了视图与业务逻辑
  • 关于我写了三万字博客后悔了好久这件事之第二个三万字GUI(swing)

    目录 简介 使用Swing的优势 Swing的特征 Swing基本组件的用法 Swing组件层次 AWT组件的Swing实现 简单了解swing JFrame 弹窗 标签 面板 按钮 3 6 列表 3 7 文本框 JTree TreeMod
  • SpringBoot项目中常见的参数传输方式

    传参方式 例子 请求方式 获取参数方式 说明 query 传统方式 getUser id 1 get和post 选用 RequestParam PathParam 路径传参 使用实体类 path REST风格 user 1 get和post
  • SSM框架-小区物业管理系统(附源码和运行视频)

    文章目录 系列文章目录 前言 一 开发框架与业务需求 1 开发框架 2 开发环境 3 整体业务 二 项目结构以及页面展示 1 注册 登录页展示 2 首页 小区管理 3 房产 业主信息管理 4 停车位 服务管理 三 ssm框架配置以及代码包级
  • MVVM框架极简总结

    MVVM是一个前端框架 由model view viewmodel组成 是MVC的升级版 变成了由viewmodel进行m和v之间的双向数据绑定 虽然代码量相较于MVC变得更多了一点 逻辑和视图分开来写 但是更利于代码解耦 也更方便测试来自
  • SpringBoot实现微信支付,微信扫码支付,Native支付(全网最详细教程)

    1 添加微信支付依赖
  • 利用MVC做一个 常见的管理系统

    登陆的部分 gt 数据库 gt 表 admin id name pass regtime 表与类的映射关系 基于面向对象 转换成对象的操作 gt 登陆页面
  • angular中的全局方法和指令介绍1

    复习并总结Angular开发流程 0 下载angular 暴力angular 找到js拖拽过来 npm下载 1 引入 2 在要控制的标签上写上ng app 3 写controller 告诉angular哪部分dom结构有哪个controll
  • 【QT学习】实现MVC框架的简易封装(一文读懂)

    文章目录 前言 一 MVC框架简介 1 核心部件 2 使用目的 3 MVC优点 二 具体封装步骤 1 文件管理 2 创建模型 3 创建控制器 4 MVC实现 用户登录验证为例 总结 前言 MVC Model View Controller
  • .NET Core 下定时任务调度

    一 增加本地json持久化调度任务 无需数据库 1 首先 我们创建一个空白的ASP NET Core 项目 MVC Razor和WebAPI都行 如图 2 通过nuget引用最新版本的GZY Quartz MUI组件 如图 组件的项目地址G
  • 基本的Java的MVC入门案例

    概念 MVC Model View Controller 模型 视图 控制器 他是一种专门设计web程序的模式 高内聚 低耦合 高内聚 专人干专事 低耦合 让类与类之间的关系不能太紧密 模型 Model 是应用程序中与处理应用程序数据逻辑的
  • Spring MVC

    文章目录 Spring MVC 是什么 什么是 MVC 如何学习 Spring MVC Spring MVC 创建和连接 获取参数 传统方式 简便的方式 获取一个自定义类的对象 从 json 字符

随机推荐

  • linux服务器硬盘IO读写负载查看

    文章目录 1 首先top命令看下2 xff0c 先用iostat查看磁盘io 是否读写负载很高重要指标 xff1a 3 找出占用io高的进程的工具 iotopIO负荷的压力测试 最近在用spark 向MySQL 倒腾数据 xff0c 发现s
  • PreparedStatement与Statement的区别及优势

    PreparedStatement是用来执行SQL查询语句的API之一 xff0c Java提供了 Statement PreparedStatement 和 CallableStatement三种方式来执行查询语句 xff0c 其中 St
  • Mac Idea卡顿、慢解决方案 限制jvm也没有用【超实用】

    前置 Mac使用idea卡顿 不流畅解决方案 xff0c 设置了jvm也没有用 快捷键提示超级慢的问题 导致原因 下载的软件版本问题 去下载标注的版本就变得非常的流畅 xff0c 超级快 版本说明 xff1a 第一个是英特尔芯片的软件 第二
  • HDFS 启动与关闭

    一 HDFS 启动与关闭 HDFS 和普通的硬盘上的文件系统不一样 xff0c 是通过Java 虚拟机运行在整个集群当中的 xff0c 所以当Hadoop 程序写好之后 xff0c 需要启动HDFS 文件系统 xff0c 才能运行 HDFS
  • Android快速入门之通过Fragment实现底部菜单栏

    早期Android应用通常使用TabHost实现页面之间的切换 xff0c 现在更多的选择ViewPager与Fragment结合的方式实现页面切换 Android提供了专门的适配器 FragmentPagerAdapter和Fragmen
  • Zemax操作35--双高斯镜头优化

    要求 xff1a 双高斯镜头是传统的单反相机镜头 相对孔径 xff1a 1 3 焦距 xff1a 75mm 可见光 视场由一个圆定义 xff0c 圆的直径是胶片的对角线 xff0c 像高21 6mm 畸变小于1 玻璃的边界条件最小边缘 中心
  • C/C++编程题之删除字符串中出现次数最少的字符

    在牛客上刷到删除字符串中出现次数最少的字符 xff0c 现在将通过的代码贴一下 xff0c 供大家参考 实现删除字符串中出现次数最少的字符 xff0c 若多个字符出现次数一样 xff0c 则都删除 输出删除这些单词后的字符串 xff0c 字
  • springboot解决servlet-api-2.5.jar和tomcat-embed-core-9.0.46.jar冲突

    2022 11 04 18 07 52 869 ERROR 86604 restartedMain o s b d LoggingFailureAnalysisReporter APPLICATION FAILED TO START Des
  • PS 修改图片大小

    平常的网络世界中 xff0c 会有一些高清晰的图片出现 xff0c 哦不 xff0c 现在的图片越来越超清了 xff1b 那么 xff0c 就需要对它们大小进行修改 xff0c 不然内存伤不起啊 xff01 以下是三种常用的方法 1 修改图
  • 将若依(RuoYI)项目打包(jar)部署到Linux服务器(详细步骤)

    第一步下载maven方便将RuoYi项目打包 1 下载网址 xff1a http maven apache org download cgi 2 3 下载3 6 3版本 解压完成后 将文件夹名称修改为maven 第二步配置maven环境变量
  • 最通俗易懂的乐观锁与悲观锁原理及实现

    一 乐观锁 总是认为不会产生并发问题 xff0c 每次去取数据的时候总认为不会有其他线程对数据进行修改 xff0c 因此不会上锁 xff0c 但是在更新时会判断其他线程在这之前有没有对数据进行修改 xff0c 一般会使用版本号机制或CAS操
  • 3.12生产者消费者模型(pthread_cond_t、sem_t)

    生产者消费者模型 生产者不能在容器满了继续生产 消费者不能在容器为空的时候消费 生产者消费者模型 粗略的版本 include lt stdio h gt include lt pthread h gt include lt stdlib h
  • ActiveMQ中Topic模式队列和Queue模式队列区别

    Topic和Queue是ActiveMQ两种消息模式 Topic用于消息订阅 xff0c 属于一对多 xff1b Queue用于消息处理 xff0c 属于一对一 分别从工作模式 有无状态 传递完整性 处理效率四个方面比较 工作模式 xff1
  • Java SpringBoot 公众号集成模板推送消息

    前言 上篇 付项目地址 xff1a https blog csdn net A yonga article details 129398716 spm 61 1001 2014 3001 5501 集成公众号请看之前的文章 本篇说明 基于已
  • Android中native进程内存泄露的调试技巧(一)

    基于Android5 0版本 Android为Java程序提供了方便的内存泄露信息和工具 xff08 如MAT xff09 xff0c 便于查找 但是 xff0c 对于纯粹C C 43 43 编写的natvie进程 xff0c 却不那么容易
  • onNewIntent 什么时候调用

    protected void onNewIntent Intent intent Since API Level 1 This is called for activities that set launchMode to 34 singl
  • [MySQL] MySQL日志系统

    概述 Mysql的日志系统是Mysql保证无论何时崩溃数据都不会丢失的关键 众所周知Mysql是持久化的数据库 所有的数据都是持久化到硬盘中的 保证数据不会丢失 Mysql保证数据不会丢失是从以下两个方面来体现的 能够恢复到任意时刻的数据状
  • IDEA搭建JavaWeb项目,JDBC和Servlet-JSP技术实现注册功能

    文章目录 使用IDEA搭建JavaWeb项目一 IDEA新建JavaWeb项目1 新建java项目2 修改项目配置3 项目部署到Tomcat 二 使用JDBC和Servlet JSP技术实现注册功能1 引入jar包2 搭建项目结构3 后端实
  • JS实现省市区三级联动

    目标 xff1a 用JS实现省市区的三级联动效果 学习内容 xff1a 掌握JS对DOM元素的获取掌握 JS对DOM元素的创建和删除掌握JSON数组的简单解析 实现思路 xff1a 省市区三级联动主要是三个下拉菜单之间的联动效果 xff0c
  • MVC三层架构详解

    文章目录 MVC三层架构详解一 MVC是什么 xff1f 1 什么是低耦合 xff1f 2 低耦合有什么好处 xff1f 3 增加代码复用率4 部署快 xff0c 且生命周期成本低5 可维护性高 二 MVC详解1 MVC经典模式2 MVC设