三层架构

什么是三层架构

UI(表现层): 主要是指与用户交互的界面,用于接收用户输入的数据和回显处理过后用户需要的数据。
BLL:(业务逻辑层):是UI层和DAL层之间的桥梁。实现业务逻辑,具体包含:验证、计算、业务规则等等。
DAL:(数据访问层):负责与数据库打交道,主要实现对数据的增、删、改、查。
将存储在数据库中的数据提交给业务层,同时将业务层处理的数据保存到数据库。
(当然这些操作都是基于UI层的。用户的需求反映给界面(UI),UI反映给BLL,BLL反映给DAL,DAL进行数据的操作,操作后再一一返回,直到将用户所需数据反馈给用户)
image.png
这三层的每一层都有自己的职责,如何将这三层联系起来呢?答案是通过实体层Entity,虽然它不属于三层中的任何一层,但是它是必不可少的一层。
简单来理解实体层的话,数据库中的每一张数据表都对应一个实体类,即每个数据表中的字段对应实体中的属性。
但是实际上实体层中的实体类在数据表对应的实体中并不存在,即实体类对应的属性跟数据库中数据库表中的字段不一致;还有就是我们完全可以将所有数据表中的所有字段都放在一个实体里。
在三层架构模式中,实体层的实体类体现了面向对象思想中的”封装”;
每一层(UI—>BLL—>DAL)之间的数据传递(单向)是靠变量或实体作为参数来传递的,这样就构造了三层之间的联系,完成了功能的实现。
image.png

为什么使用三层?

使用三层架构的目的很简单,那就是实现程序代码间的解耦!!!

MVC设计模式

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
即,
Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。
  通常模型对象负责在数据库中存取数据。
View(视图)是应用程序中处理数据显示的部分。
  通常视图是依据模型数据创建的。
Controller(控制器)是应用程序中处理用户交互的部分。
  通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
它是一个框架模式,强制性的使应用程序的输入、处理和输出分开。使用MVC的应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。最典型的MVC实现就是JSP + servlet + javabean的模式
Model: 常用javabean去实现,通过各种类来对数据库的数据进行获取,并封装在对象当中。
View: 常用JSP来实现,通过可直接观察的JSP页面来展示我们从数据库中获取的数据。
Controller: 常用servlet来实现,通过servlet来获取经过javabean包装过的对象(已存入数据库中的数据),然后再发送数据传输到JSP界面。

三层架构与MVC的区别

这两种结构既有区别,又有联系。但这两种结构的使用,均是为了降低系统模块间的耦合度。

为了更好的降低各层间的耦合度,在三层架构程序设计中,采用面向抽象编程。 即上层对下层的调用,是通过接口实现的。 而下层对上层的真正服务提供者,是下层接口的实现类。 服务标准(接口)是相同的,服务提供者(实现类)可以更换。 这就实现了层间解耦合。
MVC 架构程序的工作流程: (1)用户通过 View 页面向服务端提出请求,可以是表单请求、超链接请求、AJAX 请求等 (2)服务端 Controller 控制器接收到请求后对请求进行解析,找到相应的 Model 对用户请求进行处理 (3)Model 处理后,将处理结果再交给 Controller (4)Controller 在接到处理结果后,根据处理结果找到要作为向客户端发回的响应 View 页面。页面经渲染(数据填充)后,再发送给客户端。

举例

我们的开发架构一般都是基于两种形式,一种是C/S架构,也就是客户端/服务器,另一种是B/S架构,也就是浏览器/服务器。在JavaEE开发中,几乎全都是基于B/S架构的开发。在B/S架构中(),三层架构在我们的实际开发中使用的非常多(一般是服务器端分成三层架构),系统标准的三层架构包括: 表现层(SpringMVC)、业务层(Spring)、持久层(MyBatis)。
image.png
表现层一般要做的事情主要是跟浏览器客户端进行数据的交换,当浏览器发起一个携带请求参数的请求到服务器时,首先会到达表现层,表现层会调用业务层的接口方法返回一个处理后的响应结果,然后响应给客户端;
表现层调用业务层接口方法时,业务层则调用持久层进行查询,持久层将查询到的结果返回给业务层,业务层再将该结果返回给表现层,表现层再返回给浏览器;
image.png
而其中的表现层一般是采用MVC来做的,M是Model模型用JavaBean来表示,V是view视图用JSP或HTML表示,C是Controller控制器,代表是Servlet;
当用户的请求进入到服务器时,先到达MVC中的控制器,当控制器接收到请求之后用模型javaBean将请求处理数据进行封装,就可以跟业务层、持久层交互;持久层、业务层返回的处理之后的数据也可以封装为JavaBean,然后将结果响应回视图JSP,JSP生成HTML文档响应给浏览器用户;