开篇词
写作目的:巩固基础,将理论和实践结合。本篇文章探究MVC分层和三层架构的理念,以及SpringMVC框架与三层架构、MVC的关系。
文章思路:首先介绍MVC分层、三层架构概念,随后说明MVC分层和三层架构的关系,最后说明工程中常用的SpringMVC框架与三层架构、MVC分层的关系。
读后收获:拎得清MVC分层、三层架构;分别知道两种分层架构的解耦原理;SpringMVC技术解决方案与两种分层架构的关系。
1、怎么理解MVC分层
MVC分层是一种指导组织代码的思想,这种指导思想的最终目的是解耦(解的是视图和模型的耦)、解耦的目的是提高复用性(提升的是模型层复用性)。MVC分层概念:
M(模型层):模型层用来处理数据,指工程中的javaben。javabean又分为两类,一类是承载数据的实体,另一类是处理数据的service和dao对象。
V(视图层):视图层用来展示数据,负责对接用户交互。指工程中的jsp、html、vue等视图类型。
C(控制层):控制层用来接收和响应请求。指工程中的servlet、controller。
如下表示MVC分层模式下的请求、响应在各层间的协作处理流程:
MVC交互流程
请求流程:用户通过视图层发起请求,控制层Controller接收到请求,并调用模型层处理数据。
响应流程:模型层处理数据后,将结果返回给控制层,控制层找到对应的视图,根据数据渲染视图,并将渲染后的视图结果返回给浏览器。
如下表示采用MVC分层实现解(复)耦(用)的原理:
MVC分层解耦原理
如图所示,不考虑视图层复用,控制层复用也没意义。我们要讨论的是模型层和视图层的解耦。在图中一个视图对应一个控制器,一个控制器编排了多个模型。在MVC分层模式下通过控制层将模型层与视图层解耦,由控制层将模型层提供的数据按一定规则分配给某个视图,因此视图层是模型层和视图层解耦后的粘合剂。如图,模型1被视图1通过控制器1使用;模型1、模型2被控制器2编排后提供给视图2使用;模型2被视图3通过控制器3使用。
2、怎么理解三层架构
三层架构也是一种指导组织代码的思想,这种思想最终的目的也是解耦(解的是视图层与业务逻辑层的耦、业务逻辑层与数据访问层的耦)。解耦的目的是降低层间依赖,提高层内扩展性。
三层架构
三层架构概念:
表示层:负责接收和响应请求。接收到请求后,不涉及到业务逻辑判断,便将请求内容传给业务逻辑层,并在拿到业务逻辑层结果后,做与响应结果相关的处理,包括视图渲染、响应结果封装等。
业务逻辑层:负责接收表示层提供的请求内容,并结合请求内容做业务逻辑处理,必要时调用数据访问层完成数据操作,并将业务逻辑的处理结果返回到表示层。
数据访问层:负责接收业务逻辑层的请求内容,不包含业务逻辑相关判断,实现数据操作,将操作结果返回到业务逻辑层。
如下图表示三层架构实现层间解(扩)耦(展)原理:
三层架构解耦原理
如图所示,三层架构依靠接口和实现分离达到降低层间依赖的目的,并通过一个接口多个实现达到层内扩展的目的。
3、三层架构和MVC的关系
三层架构和MVC没有半毛钱关系,两者的目的虽然都是解耦,但是实现解耦目的时的关注点不同。三层架构解耦是通过接口和实现分离达到降低层间依赖、提高层内扩展的目的;MVC模式解耦是通过控制层实现视图层和模型层的解耦。如下图表示,三层架构和MVC分层的对应关系:
三层架构与MVC模式对应关系
4、SpringMVC与三层架构、MVC分层的关系
SpringMVC在三层架构中只关注表示层技术领域;在MVC分层结构中,只关注视图层和控制层技术领域。因此SpringMVC是在不同分层思想架构中,对应层的技术解决方案。
总结
MVC是一种组织代码的指导思想,它的目标是解耦(视图层和模型层的耦合),解耦的目的是实现模型层的复用。
三层架构也是一种组织代码的知道思想,它的目标是解耦(层间解耦),解耦的目的是降低层间依赖、提高层内扩展。
SpringMVC是三层架构中表现层的技术解决方案,是MVC分层结构中的视图层和控制层技术解决方案。