码农小汪-SPringMVC-基本的理解MVC 降低耦合性~依赖性

本文主要是介绍码农小汪-SPringMVC-基本的理解MVC 降低耦合性~依赖性,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

标准 MVC 模型概述

MVC模型:是一种架构型的模式,本身不引入新功能,只是帮助我们将开发的结构组织的更加合理,使展示与模型分离、流程控制逻辑、业务逻辑调用与展示逻辑分离

这里写图片描述

  1. Model(模型):
    数据模型,提供要展示的数据,因此包含数据和行为,可以认为是领域模型或 JavaBean 组件(包含数据和行为),不过现在一般都分离开来:Value Object(数据) 和 服务层(行为)。也就是模型提供了模型数据查询和模型数据的状态更新等功能,包括数据和业务。
  2. View(视图):
    负责进行模型的展示,一般就是我们见到的用户界面,客户想看到的东西。
  3. Controller(控制器):
    接收用户请求,委托给模型进行处理(状态改变) ,处理完毕后把返回的模型数据返回给视图,由视图负责展示。 也就是说控制器做了个调度员的工作。

在标准的 MVC 中模型能主动推数据给视图进行更新(观察者设计模式,在模型上注册视图,当模型更新时自动更新视图),但在 Web 开发中模型是无法主动推给视图(无法主动更新用户界面),因为在 Web 开发是
请求-响应模型。

Web MVC 概述

这里写图片描述

在 Web MVC 模式下,模型无法主动推数据给视图,如果用户想要视图更新,需要再发送一次请求(即请求-响应模型)。

在JavaEE世界里,它可以认为就是Web MVC模型
这里写图片描述

我们来看看以前的写法吧,这个是看大神写的,其实哈,我们学习过Struct2啦,看这个感觉就是有非常多的缺点的,所以我们还是的必须的看哈,才知道怎么去解决这些问题的!
这里写图片描述

这里写图片描述

这里写图片描述

可以看出,视图和模型分离了,控制逻辑和展示逻辑分离了!
之前的我刚开始学习jsp的时候也像这么的做过这些事情,简直是渣的不行啦~~那时候还觉得好厉害啊~ 我也是晕啦!

  • 这些有啥子缺点呢~~

    1. 选择下一个视图,严重依赖 Servlet API,这样很难或基本不可能更换视图
    2. 给视图传输要展示的模型数据,使用 Servlet API,更换视图技术也要一起更换,很麻烦
    3. 此处模型使用 JavaBean, 可能造成 JavaBean 组件类很庞大, 一般现在项目都是采用三层架构, 而不采用 JavaBean。(这个就是我们说的Dao,Service…Entity)
      这里写图片描述

    4. 现在被绑定在 JSP,很难更换视图,比如 Velocity、FreeMarker;比如我要支持 Excel、PDF 视图等等

    5. Front Controller + Application Controller + Page Controller + Context.即,前端控制器+应用控制器+页面控制器(也有称其为动作)+上下文,也是 Web MVC,只是责任更加明确
      这里写图片描述
      这里写图片描述

干净的 web 表现层:

模型和视图的分离;
控制器中的控制逻辑与功能处理分离(收集并封装参数到模型对象、业务对象调用) ;
控制器中的视图选择与具体视图技术分离。

轻薄的 web 表现层:

做的事情越少越好,薄薄的,不应该包含无关代码;
只负责收集并组织参数到模型对象,启动业务对象的调用;
控制器只返回逻辑视图名并由相应的应用控制器来选择具体使用的视图策略;
尽量少使用框架特定 API,保证容易测试

看到这个谢啦这么多的文字,确实很深入的理解啦~很不错哦

这篇关于码农小汪-SPringMVC-基本的理解MVC 降低耦合性~依赖性的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

一篇文章彻底搞懂macOS如何决定java环境

《一篇文章彻底搞懂macOS如何决定java环境》MacOS作为一个功能强大的操作系统,为开发者提供了丰富的开发工具和框架,下面:本文主要介绍macOS如何决定java环境的相关资料,文中通过代码... 目录方法一:使用 which命令方法二:使用 Java_home工具(Apple 官方推荐)那问题来了,

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

Redis 基本数据类型和使用详解

《Redis基本数据类型和使用详解》String是Redis最基本的数据类型,一个键对应一个值,它的功能十分强大,可以存储字符串、整数、浮点数等多种数据格式,本文给大家介绍Redis基本数据类型和... 目录一、Redis 入门介绍二、Redis 的五大基本数据类型2.1 String 类型2.2 Hash

Java中的.close()举例详解

《Java中的.close()举例详解》.close()方法只适用于通过window.open()打开的弹出窗口,对于浏览器的主窗口,如果没有得到用户允许是不能关闭的,:本文主要介绍Java中的.... 目录当你遇到以下三种情况时,一定要记得使用 .close():用法作用举例如何判断代码中的 input