赞
踩
三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用(服务端)划分为:
表现层(User Interface layer):又叫表示层,负责接收用户请求、转发请求、生成数据的视图等。一般表现为界面,用户通过界面输入、查询和得到需要的数据。
业务逻辑层(Business Logic Layer):简称业务层,是针对具体问题的操作,主要是从数据库中得到数据,然后对数据进行逻辑处理,是数据业务逻辑处理。
数据访问层(Data access layer):又叫持久层,该层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找等。负责持久化业务对象;
区分层次的目的即为了“高内聚,低耦合”的思想。
这三个分层,每一层都有不同的模式,即架构模式,如下图:
模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。
View(视图):视图代表模型包含的数据的可视化。是用户看到并与之交互的界面(它可以包括一些可以显示数据信息的页面,或者展示形式。例如jsp,html,asp,php)
Model(模型):
Controller(控制器):
这里有一个实例:
在客户端里输入用户名,密码 --> 发送http请求–>触发 Controller 调用 Model 的数据校验接口,Model 校验不符合,触发 Controller 选择登录失败的 View 返回给客户端,用户就看到一个登录失败的提示,之后客户端里输入正确的密码,重复之前的操作,如 model 校验 success,则触发 Controller 去做对应策略的选择,再调用 model 的登录接口来请求登录(策略设计模式),model 和数据存储系统交互,完毕之后触发 controller 更新 view(观察者设计模式)……用户就看到登录成功的提示了。
首先,最重要的一点是多个视图能共享一个模型,正如我所提及的,现在需要用越来越多的方式来访问你的应用程序。对此,其中一个解决之道是使用MVC,无论你的用户想要Flash界面或是 WAP 界面;用一个模型就能处理它们。由于你已经将数据和业务规则从表示层分开,所以你可以最大化的重用代码了。
控制器也提供了一个好处,就是可以使用控制器来联接不同的模型和视图去完成用户的需求,这样控制器可以为构造应用程序提供强有力的手段。给定一些可重用的模型和视图,控制器可以根据用户的需求选择模型进行处理,然后选择视图将处理结果显示给用户。
在三层架构中没有定义Controller的概念。这是最不同的地方。而MVC也没有把业务的逻辑访问看成两个层,这是采用三层架构或MVC搭建程序最主要的区别。
在三层中也提到了Model,但是三层架构中Model的概念与MVC中Model的概念是不一样的,“三层”中典型的Model层是由业务逻辑与访问数据组成的。而MVC里,则是以实体类构成的。
MVC是对应三层架构中的划分?
①MVC中的model可以包括处理业务逻辑和数据库交互(接口),所以是表示层+业务层,并没有持久层。
②但是更权威的说法就和最开始的图片一样,把所有的逻辑操作都放在了业务层里面,在它所实现的主要功能里面,例如接收用户请求、转发请求、生成数据的视图等都肯定有业务逻辑,而MVC只相当于调用接口(类似调用持久层的接口),所以把MVC归结于表现层。
对于MVC来说,持久层就是服务端提供的那些接口;
三层是基于业务逻辑来分的,而mvc是基于页面(文件所属类型)来分的
三层架构是一个分层式的软件体系架构设计,它可适用于任何一个项目。MVC是一个设计模式,它是根据项目的具体需求来决定是否适用于该项目。
那么架构跟设计模式有什么区别呢?
我们从接手一个项目开始,首先,我们需要进行架构设计,一般我们采用的就是分层式的架构设计,即我们的三层架构。
然后,在确定了架构以后,我们再根据项目的具体需求去考虑是否需要应用一些设计模式,比如是否应用我们的MVC模式,抽象工厂模式等等。(在这里我们看出,MVC与三层架构不是一个等级的,而与抽象工厂等设计模式才是一路的)
MVC模式是一种复合设计模式,一种解决方案
三层模式又可归于部署模式,MVC可归于表示模式
业务层的架构模式有事务脚本模式、领域模型模式等等,企业应用中最关键的显然是业务层。
事务这里代表表示层的一个请求,所谓脚本就是一个方法,所谓事务脚本就是将一次请求封装为一个方法,所谓事务脚本模式,就是将业务层的对象分为三类,其中:
Service 类封装业务流程,或者说是纯粹的界面上的业务流程
DAO 类只负责对数据的操作,也就是封装对持久层的访问
DTO(Student)类封装业务的实体对象,负责业务层内数据的传输流动
DAO类
DTO类:
一般来说,框架 > 架构模式 > 设计模式 > 设计原则
打个比方,Hibernate是一个持久层框架,是数据映射器模式的具体实现,实现时用到了工厂模式等很多设计模式,体现了什么依赖倒转原则、开闭原则、里氏替换原则等等设计原则。
AngularJS是一个客户端 MVC 框架,是 MVC架构模式的一种实现,实现时用到……设计模式,体现了……等设计原则。
MVC是表示层框架诸如此类。
SpringBoot 实际上是一个快速开放框架,里面的web模块中是包含SpringMVC的;
SpringMVC 是一种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架
SpringBoot是Spring框架的一个模块,用于创建独立的,生产级的Spring基础应用程序,并且程序员的工作量最小。它是在核心弹簧框架之上开发的。spring boot背后的主要概念是避免大量的样板代码和配置来改进开发,单元测试等。在创建新的spring应用程序的情况下,我们编写了许多XML配置,服务器设置,添加依赖项等。这些配置文件是样板代码的一个例子。Spring boot避免了所有这些样板代码。
首先来说一下业务逻辑:
Controller–>service接口–>serviceImpl–>dao接口–>daoImpl–>mapper–>database
DAO = Data Access Object = 数据存取对象。
dao层即数据持久层,也被称为mapper层。
不管是什么框架,我们很多时候都会与数据库进行交互。如果遇到一个场景我们都要去写SQL语句,那么我们的代码就会很冗余。所以,我们就想到了把数据库封装一下,让我们的数据库的交道看起来像和一个对象打交道,这个对象通常就是DAO。当我们操作这个对象的时候,这个对象会自动产生SQL语句来和数据库进行交互,我们就只需要使用DAO就行了。
通常我们在DAO层里面写接口,里面有与数据打交道的方法。SQL语句通常写在mapper文件里面的。
优点:结构清晰,Dao层的数据源配置以及相关的有关数据库连接的参数都在Spring配置文件中进行配置。
简单来说,dao层的作用为访问数据库,向数据库发送sql语句,完成数据的增删改查任务
服务是一个相对独立的功能模块,主要负责业务逻辑应用设计。首先也要设计接口,然后再设计其实现该接口的类。这样我们就可以在应用中调用service接口进行业务处理。service层业务实现,具体调用到已经定义的DAO的接口,封装service层的业务逻辑有利于通用的业务逻辑的独立性和重复利用性 。
如果把Dao层当作积木,则Service层则是对积木的搭建。、
主要负责具体业务模块流程的控制,此层要调用到Service层的接口去控制业务流程,控制的配置同样在Spring配置文件中配置。针对不同的业务流程有不同的控制器。在设计的过程可以设计出重复利用的子单元流程模块。
模型就是指视图的数据Model,模型,通常来讲,我们会把模型和另一个东西放在一起来说:View,视图。
模型通常认为是视图的内核,何谓之视图?我们正在与之交互的网站的界面就是视图,而模型是指他的内核:数据。
将Model和View的概念拆分开来,有助于我们关注不同的方面,也可以更有效的分工。有些工程师更关注于内核也就是模型,通常来说,他们被称之为后端工程师。有些工程师更关注于用户界面的交互和展示,通常来说,他们被称之为前端工程师。
(Entity层)
与Controller层关系紧密,View层主要负责前台jsp页面的表示。
Controller层像是一个服务员,他把客人(前端)点的菜(数据、请求的类型等)进行汇总什么口味、咸淡、量的多少,交给厨师长(Service层),厨师长则告诉沾板厨师(Dao 1)、汤料房(Dao 2)、配菜厨师(Dao 3)等(统称Dao层)我需要什么样的半成品,副厨们(Dao层)就负责完成厨师长(Service)交代的任务。
建立了DAO层后才可以建立Service层,而Service层又是在Controller层之下的,因而Service层应该既调用DAO层的接口,又要提供接口给Controller层的类来进行调用,它刚好处于一个中间层的位置。每个模型都有一个Service接口,每个接口分别封装各自的业务处理方法。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。