JavaWeb中MVC和三层架构详解
Posted M_emory_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaWeb中MVC和三层架构详解相关的知识,希望对你有一定的参考价值。
之前对MVC和三层架构这两个概念模棱两可,今天通过看视频和查阅文档终于搞明白了它们之间的区别。
首先来了解一下三层架构和MVC
MVC 是一种分层开发的模式,其中:
-
M:即Model(模型层),主要负责处理业务逻辑以及数据库的交互
-
V:即View(视图层),主要负责显示数据和提交数据
-
C:即Controller(控制层),主要是用作辅助捕获请求并控制请求转发
MVC 好处
-
职责单一,互不影响
-
有利于分工协作
-
有利于组件重用
三层架构
-
数据访问层:对数据库的 CRUD 基本操作
-
业务逻辑层:对业务逻辑进行封装,组合数据访问层层中基本功能,形成复杂的业务逻辑功能
-
表现层:接收请求,封装数据,调用业务逻辑层,响应数据
两者区别:
三层是基于业务逻辑来分的,而mvc是基于页面来分的
MVC模式是一种复合设计模式,一种解决方案
三层是种软件架构,通过接口实现编程
三层模式是体系结构模式,MVC是设计模式
三层模式又可归于部署模式,MVC可归于表示模式
MVC和三层架构之间的关系
作为一名Android研发,最近再研究一些服务端的开发,遇到一个问题“Mvc和三层架构之间的关系是啥”。参考了一些资料,做一些记录。
现在服务端JavaWeb开发比较流行的是使用脚手架SpringBoot框架来进行开发,SpringBoot能很方便的实现SSM框架的服务端架构。下面拿SSM框架和三层架构进行比较分析。
一、三层架构
三层架构是指:视图层View、服务层Service、持久层Dao,分别完成不同的功能。
View层:用于接收用户提交请求的代码。
Service层:系统的业务逻辑。
Dao层:直接操作数据的代码在这里写。
所有的架构的目的,都是为了解耦,是系统具备更好的扩展性、便捷性,在三层架构的设计中,采用了面向抽象编程,在耦合关系层面,是一种抽象耦合关系,实际实现中是上层对下层的调用,是通过接口实现的。而下层对上层是真正的服务提供者,是下层接口的实现类。【耦合关系】
三层架构的结构图如下:
二、MVC
MVC:Model模型、View视图、Controller控制器
View:视图,为用户提供使用界面,与用户直接进行交互。
Model:模型,承载数据,并对用户提交的请求进行计算的模块。其分为两类,一类是数据承载bean,一类是业务处理bean。所谓数据承载的bean,就是我们通常通过面向对象设计抽象出来的实体bean,比如User、Car、Order等。而业务处理的bean则是指Service或Dao对象,专门用于用户提交的请求。
Controller:控制器,用于将用户的请求转发给相应的model进行处理,并处理Model的计算结果向用户提供相应的响应。
我们看一个Mvc架构的应用程序的工作流程如下:
- 用户通过View页面向服务端发出请求,可以是表单请求,超链接请求、Ajax请求等。
- 服务端的Controller控制器接受到请求后,对请求进行解析,找到对应的Model对用户的请求进行处理。在SpringBoot中通过@RestController、@RequestMapping注解就能很方便的指定对请求处理的Controller对象。
- Model处理后,将处理结果再交给Controller。
- Controller在接到处理结果后,根据处理结果找到要做作为客户端发回的响应,这个响应可以渲染数据的页面,也可以是Restful风格的json/xml格式的返回体(多用于移动端开发),返回(发送)给客户端。
经过上述的分析,其实相信应该对Mvc和三层架构之间的差别和联系应该有了一些了解,接下来,我们对Mvc和三层架构做一些结论性质的梳理。
Mvc和三层架构之间的关系的结论如下:
- 三层架构中的View层简单来说是和用户直接发生关系的层,MVC中的V和C就是这样的存在,所以MVC中的V和C均属于三层架构中的View层。
- MVC中的Model包含了数据承载和业务处理,对应了三层架构中的Service层和Dao层的实现。
三、SSM和三层架构的关系
SSM即SpringMvc、Spring、Mybatis三个框架。他们在三层架构中所处的位置是不同的。
SpringMVC:作为View层的实现者,完成用户的请求接受功能。SpringMvc的Controller作为整个应用的控制器,完成对用户请求的转发以及对用户的响应。
MyBatis:作为Dao层的实现者,完成对数据的增删改查处理。
Spring:Spring是整个应用中所有bean的管理者容器,包括对象的创建、初始化、销毁、以及对象之间关联关系的维护(对象的注入),均有Spring进行管理。
另外,现在的大多项目是基于SpringBoot开发的,如果把SSM理解成服务端架构的框架,则可以将SpringBoot理解成快速高效开发SSM应用的程序的脚手架工具。
作为一名曾经的Android研发工程师,这里联想一下15年左右Android的基础的开发模式,也被认为是MVC的方式架构,Activity充当着Controller的角色,我们也定义了Service模块进行网络的请求的发起和响应的数据处理,同样对于数据类型的操作,我们也可以定义Dao层对本地的Sqlite的数据库进行数据的增删改查。
当然,Android现在的技术生态早已很强大,Mvp和Mvvm的架构方式都存在,还有好多变种。Android官方的架构项目Android architecture也早已在Android Developer的官方网站呈现,官方架构的Jetpack组件包也在不但的壮大,后续也会再深入对比MVC、MVP、MVVM的理解和对比、以及对Android的架构做研究分享。
最后,架构是代码的组织形式,任何一种架构模式也并非一成不变,特定场景也会灵活使用,比如除了我们提的三层架构、MVC,其实还有很多对应的架构方式,比如多层架构、MVP、MVVM等等,而架构的核心目的说的通俗一点,都是为了更好的组织代码,让代码效率提升,包括但不限于扩展性、稳定性、容灾性等等。
以上是关于JavaWeb中MVC和三层架构详解的主要内容,如果未能解决你的问题,请参考以下文章