为什么系统要分层?如何知晓公司系统中采用的是什么分层架构?

在计算机领域现有最典型的分层架构设计就是OSI参考模型和TCP/IP参考模型了。关于这个模型,我们在《 一篇文章,只用看三遍,终生不忘网络分层! 》一文中已经详细介绍了。下面直接看一下相关的模型图:

对于上述的三种分层模式,试想一下,如果没有分层,当一个业务或协议需要改变时,我们只能针对整个系统做修改或扩展。而分层之后,便可以很方便地把不同功能的模块抽离出来,修改对应的模块即可。而且不同层还可以被复用,只要确保按照这个层的协议来处理就可以了。

软件系统整体分层

以Java软件应用为例,整个软件系统也可进行分层,比如分为部署的硬件环境、操作系统、所需的中间件、承载业务的应用程序以及软件接入层。可通过下图进行整体了解:

对于上述分层也产生了对应在职位,比如运维工程师、中间件工程师、产品经理、开发工程师、测试工程师等工种。而我们在实践过程中,接触最多,使用最多的分层要属应用软件层了,其次是中间件层。

下面我们就来看看针对应用软件层通常有哪些分层方式。

经典三层架构

三层架构(3-tier application) ,通常就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。

表现层(UI),通俗讲就是展现给用户的界面,对应项目中的Web层包含Servlet和Controller等。

业务逻辑层(BLL):也称作领域层,负责系统业务逻辑的处理,对应项目中Service和ServiceImpl等。

数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找等,对应项目中的Dao。

在提出该分层架构的时代,多数系统往往较为简单,本质上都是一个单体架构(Monolithic Architecture)的数据库管理系统。这种分层架构已经是Client-Server架构的进化了,它有效地隔离了业务逻辑与数据访问逻辑,使得这两个不同关注点能够相对自由和独立地演化。

在开源技术框架中,表现层实现的代表作品是Struts1/2、Spring MVC,业务层实现的代表作品是Spring,持久层实现的代表作品是Hibernate和Mybatis。

MVC

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。

标准的MVC交互模型如下图:

View:视图,为用户提供使用界面,与用户直接进行交互。

Model:模型,承载数据,对用户提交请求进行计算的模块。分为两类,一类称为数据承载Bean,一类称为业务处理Bean。数据承载Bean是指实体类,专门承载业务数据的,如Student、User等。而业务处理Bean则是指Service或Dao对象,专门用于处理用户提交请求的。

Controller:控制器,用于将用户请求转发给相应的Model进行处理,并处理Model的计算结果向用户提供响应。

从图中可以看到,标准的MVC中模型能主动推数据给视图进行更新(观察者设计模式,在模型上注册视图,当模型更新时自动更新视图),但在Web开发中模型是无法主动推给视图(无法主动更新用户界面),因为在Web开发是请求-响应模型。

Web MVC标准架构,如下图所示:

在Web MVC模式下,模型无法主动推数据给视图,如果用户想要视图更新,需要再发送一次请求(即请求-响应模型)。MVC用于将web(UI)层进行职责解耦。

三层架构和MVC的区别与联系

MVC严格说是三层架构中的UI层,也就是说,MVC把三层架构中的UI层再度进行了分化,分成了控制器、视图、实体三个部分,控制器完成页面逻辑,通过实体来与界面层完成通话,而C层直接与三层中的BLL进行对话。

三层架构和MVC可以共存。三层架构是基于业务逻辑来分的,而MVC是基于页面来分的。MVC是表现模式(Presentation Pattern),三层架构是典型的架构模式(Architecture Pattern)。

三层架构的分层模式是典型的上下关系,上层依赖于下层。但MVC作为表现模式是不存在上下关系的,而是相互协作关系。即使将MVC当作架构模式,也不是分层模式。MVC和三层架构基本没有可比性,是应用于不同领域的技术。

阿里四层架构

三层架构实现比较简单,很多朋友可能觉得项目分层就应该如此,结果就是往往会出现一大堆的业务逻辑都堆砌在Service层中。而在《阿里巴巴 Java 开发手册 》中将原来的三层架构进一步细化,添加了Manager通用业务处理层。

Manager层可以将原Service层的一些通用能力进行下沉,比如与缓存和存储交互策略,中间件的接入;还可以封装对第三方接口的调用,比如调用支付服务,调用审核服务等RPC接口。

通用业务处理层,它有如下特征:

对第三方平台封装的层,预处理返回结果及转化异常信息。

对Service层通用能力的下沉,如缓存方案、中间件通用处理。

与DAO层交互,对多个DAO的组合复用。

其各层的作用如下:

终端显示层:各端模板渲染并执行显示的层。当前主要是Velocity渲染,JS渲染, JSP渲染,移动端展示等。

开放接口层:将Service层方法封装成开放接口,同时进行网关安全控制和流量控制等。

Web层:主要是对访问控制进行转发,各类基本参数校验,或者不复用的业务简单处理等。

Service层:业务逻辑层。

Manager层:通用业务处理层。

DAO层:数据访问层,与底层 MySQL、Oracle、HBase 等进行数据交互。

外部接口或第三方平台:包括其它部门RPC开放接口,基础平台,其它公司的HTTP接口。

系统工程结构

在学习了以上分层架构之后,下面来看一下针对分层在软件系统中的对照关系表:

以上分层定义仅供参考。在上表中还多出了对外接口层和接入层。

对外接口层:所有对外的接口放在这层,不能包含任何业务逻辑,只数据对象的转换和异常的封装。

接入层:所有外部系统的依赖放在这层,好处是一旦外部系统接口修改,只需要在一处修改即可。

DDD分层架构

DDD是一种处理高度复杂领域的设计思想,试图分离技术实现的复杂性,同时围绕业务概念构建领域模型,提出的一种软件架构设计的方法论。

DDD分层架构将数据、缓存等都视为基础层, 可以被所有层调用;抽离了领域层,负责核心业务逻辑处理,领域层调用外部依赖全部通过接口,以保证领域层的100%单测覆盖率;应用层聚合多个领域层的能力,只做功能的组合、转发,不负责具体业务逻辑。

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
深开发者,这些资料都将为你打开新的学习之门!**

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 18
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值