MVC 三层的架构和web中三层架构的区别

web中三层架构

系统标准的三层架构包括:表现层、业务层、持久层。

表现层

又叫web层,  controller  控制器,控制层

作用:它负责接收客户端请求,向客户端响应结果,通常客户端使用http协议请求web 层,web 需要接收 http 请求,完成 http 响应。

业务层:

又叫 service 层

它负责业务逻辑处理,和我们开发项目的需求息息相关。web 层依赖业务层,但是业务层不依赖 web 层。
业务层在业务处理时可能会依赖持久层,如果要对数据持久化需要保证事务一致性。(也就是我们说的,事务应该放到业务层来控制)

持久层

又叫dao层 mapper层  respotiry层

负责数据持久化

持久层就是和数据库交互,对数据库表进行曾删改查的。

三层调用调用关系如下:

web层调用service层  service层调用dao层  dao层操作数据库

返回数据的关系如下:

dao操作数据库从数据库中拿到数据给我们的service层  然后service层在给我们的web层

MVC 三层的架构和web中三层架构的区别_第1张图片

 MVC 三层的架构和web中三层架构的区别_第2张图片

在springmvc里面的controller和原生的servlet的关系

本质上springmvc是基于servlet,所以controller和servlet都是在web层  都是发出请求和响应请求的

只是在springmvc中的controller在当我们的浏览器(客户端)发出请求时,不是直接到达Controller

而是先达到DispatcherServlet中央处理器,前端控制器/核心处理器),DispatcherServlet负责接收请求,响应请求,DispatcherServlet收到请求之后,要调用Controlle,但是不知道要调用哪个Controller能够处理发过来的请求,这时就先让HandlerMapping(处理器映射器)去找Controller,看哪个Controller可以处理发过来的请求,等找到之后 在安排HandlerAdapter(处理器适配器)去调用Controller,HandlerAdapter就可以去调用Controller方法,调用Controller方法之后会返回一个视图名称,然后视图解析器在去咨询找页面,在经过渲染页面,在返回给我们的客户端

DisPatcherServlet的生命周期和Servlet是相同的,都是在第一次被访问是创建,容器关闭时销毁。

MVC 三层的架构和web中三层架构的区别_第3张图片

 

MVC 三层的架构和web中三层架构的区别_第4张图片

解释:

当我们的浏览器(客户端)发出请求时,不是到达Controller

而是先达到DispatcherServlet中央处理器,前端控制器/核心处理器),DispatcherServlet负责接收请求,响应请求,DispatcherServlet收到请求之后,要调用Controlle,但是不知道要调用哪个Controller能够处理发过来的请求,这时就先让HandlerMapping(处理器映射器)去找Controller,看哪个Controller可以处理发过来的请求,等找到之后 在安排HandlerAdapter(处理器适配器)去调用Controller,HandlerAdapter就可以去调用Controller方法,调用Controller方法之后会返回一个视图名称,然后视图解析器在去咨询找页面,在经过渲染页面,在返回给我们的客户端

生活中的例子理解三层:

MVC 三层的架构和web中三层架构的区别_第5张图片

  • 服务员:负责接待客人和传菜

  • 主厨:后厨的头头,后处里主厨说了算。可以理解为架构师,负责后厨和服务员的对接

  • 小厨:每个小厨有自己特定的工作,各司其职

  • 他们三者是如何联系的?

我们走进饭店,服务员(web层,  controller  控制器,控制层,表现层,表示层)递上了菜单,

 一番精挑细选之后,我决定点个西红柿炒鸡蛋。服务员拿着菜单,交给后厨的主厨(service 层,业务层。业务逻辑层)。主厨拿到我的菜单后,小厨(dao层 mapper层)A负责洗菜,小厨B负责切菜,小厨C负责炒菜,小厨D负责装盘。

那大师傅(service 层,业务层。业务逻辑层)干嘛了?

主厨都这个级别了,当然是负责呐喊加油呀!安排小厨们干活,负责给服务员上菜。

这时,店里来了一个大佬,说要吃东坡肉。小厨C一想,我靠,我不会做呀!总不能让客人走吧!这时,主厨说,老铁们,不慌,有我在!然后,大厨在重新安排并且指导手下的4个小弟来做这道菜。

对于主厨来说,小弟们可以说自己不会,但是自己却不能。其实小弟们就是数据访层(dao层 mapper层),他们的操作是原子性的,不能再分割了,会的都是最基本的手艺。但是,自己是业务逻辑层,要删除或是添加一个操作,不是简单地直接删除或是添加,而是由数据访问层这些底层的功能组合起来的操作。在删除时,判断用户是否存在;在添加时,也要判断用户是否存在,防止重复操作造成数据冗余。

思想:高内聚,低耦合

为什么使用三层
使用三层架构的目的:解耦!!!

同样拿上面饭店的例子来讲:

服务员(UI层)请假——另找服务员;

主厨(BLL层)辞职——招聘另一个主厨;

小厨(DAL)辞职——招聘另一个小厨;

【顾客反映】

你们店服务态度不好——服务员的问题。开除服务员;

你们店菜里有虫子——主厨的问题。换厨师;

任何一层发生变化都不会影响到另外一层!!!
三层架构每层之间的逻辑关系

MVC 三层的架构和web中三层架构的区别_第6张图片

MVC 三层的架构

模型(Model)

模型封装了数据及对数据的操作,可以直接对数据库进行访问。

简要的讲:就是一个或多个javabean对象,用于存储数据和业务逻辑。

视图(View)

页面视图,用于展示数据  jsp   html

控制器(Controller):

主要负责与model和view打交道。 换句话说,model和view之间一般不直接打交道,

view中不会对model作任何操作, model不会输出任何用于表现的东西,如HTML代码等

所以 Contorller用于决定使用哪些Model,对Model执行什么操作,为视图准备哪些数据,是MVC中沟通的桥梁。

MVC 三层的架构和web中三层架构的区别_第7张图片

例子:

用如下图片举例:

图片来自(94条消息) MVC与三层架构理解_iqqcode的博客-CSDN博客_mvc三层架构

https://blog.csdn.net/weixin_43232955/article/details/104963392(94条消息) MVC与三层架构理解_iqqcode的博客-CSDN博客_mvc三层架构

MVC 三层的架构和web中三层架构的区别_第8张图片

控制器Controller 的作用就是将Model 与 View一一对应起来

我们用用户登录这个例子来说明:

View层是index.jsp,Cotroller是/loginServlet,Model是JavaBean对象

用户看到的是JSP展示页面,用户输入数据点击登录按钮时,这是JSP会通过数据共享将请求转发到/loginServlet控制器上

然后控制器再将请求分发到Model上,通过JDBC连接到数据库来查询数据库中是否存在该用户信息。

若存在该用户,则返回信息,让控制器告诉前台页面展示登陆成功的信息;不存在则告诉登陆失败…

View来响应控制器交给它的数据
在这个过程中,控制器其实只是起到了承上启下的作用,它只负责中转(指挥调度),不负责具体的业务操作。

MVC与三层架构的区别

MVC 三层的架构和web中三层架构的区别_第9张图片

无论是MVC还是三层架构,都是一种规范,都是奔着"高内聚,低耦合"的思想来设计的。

你可能感兴趣的:(mvc)