系统分层架构的全面解析

16 篇文章 0 订阅
订阅专栏

本文汇总了传统MVC架构、后端三层架构、阿里分层架构、DDD架构以及基于DDD架构的整洁架构和六边形架构。从前往后越来越复杂,其他也对应着软件工程的越来越复杂,架构模式也变的越来越复杂

软件架构领域没有一招鲜吃遍天的功法,针对的不同的业务场景采用不同的架构,并且随着业务的发展,不断调整架构以适应业务的发展,以变(架构、技术组件、重构等)应不变(业务发展、用户体验、稳定性等)才是一个合格的软件工程师应追求的境界。

1.为什么要分层?

分层架构是将软件模块按照水平切分的方式分成多个层,一个系统由多层组成,每层由多个模块组成。同时,每层有自己独立的职责,多个层次协同提供完整的功能。

如果系统没有分层,当业务规模增加或流量增大时我们只能针对整体系统来做扩展。分层之后可以很方便的把一些模块抽离出来,独立成一个系统,并且有如下的特点(好处):

  • 高内聚:分层的设计可以简化系统设计,让不同的层专注做某一模块的事
  • 低耦合:层与层之间通过接口或API来交互,依赖方不用知道被依赖方的细节
  • 复用:分层之后可以做到很高的复用
  • 扩展性:分层架构可以让我们更容易做横向扩展

分层设计的本质其实就是将复杂问题简单化,基于单一职责原则让每层代码各司其职,基于“高内聚,低耦合”的设计思想实现相关层对象之间的交互。从而,提升代码的可维护性和可扩展性。

2.传统MVC架构?

当我们实现一个应用程序时(不使用O/R Mapping),我们可能会写特别多数据访问层的代码,从数据库保存、删除、读取对象信息,而这些代码都是重复的。而使用ORM则会大大减少重复性代码。对象关系映射(Object Relational Mapping,简称ORM),主要实现程序对象到关系数据库数据的映射。

优点:关注前后端分离
缺点:模型层分层太粗,融合了数据处理、业务处理等所有的功能。核心的复杂业务逻辑都放到模型层,导致模型层很乱
适应场景:后端业务逻辑简单的服务,比如接口直接提供对数据库增删改查
在这里插入图片描述

  • 模型M:核心逻辑和数据 --业务模型 (模型,承载数据,对用户提交请求进行计算的模块。分为两类,一类称为数据承载Bean,一类称为业务处理Bean。数据承载Bean是指实体类,专门承载业务数据的,如Student、User等。而业务处理Bean则是指Service或Dao对象,专门用于处理用户提交请求的。
  • 视图V:展示数据 --用户界面 (视图,为用户提供使用界面,与用户直接进行交互。)
  • 控制器C:处理用户的输入,解耦 --控制器 (控制器,用于将用户请求转发给相应的Model进行处理,并处理Model的计算结果向用户提供响应。)

作用:使用mvc的作用是将M和V进行分离,从而使同一个程序可以使用不同的表现形式,其实就是一组数据,可以分别用柱状图或者饼状图来进行展示

3.后端三层架构?

  • 表现层:controller (通俗讲就是展现给用户的界面,对应项目中的Web层包含Servlet和Controller等。)
  • 逻辑层:service(也称作领域层,负责系统业务逻辑的处理,对应项目中Service和ServiceImpl等。)
  • 数据访问层:dao(该层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找等,对应项目中的Dao。)
    在这里插入图片描述
    在这里插入图片描述
    优点:逻辑与数据层分离
    缺点:模型层分层比较粗,核心的复杂业务逻辑都放到模型层,导致模型层很乱
    适应场景:后端业务逻辑简单的服务,比如接口直接提供对数据库增删改查

4.后端三层架构和MVC的区别与联系?

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

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

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

5.阿里四层分层架构?

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

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

这一层有两个作用:

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

特点:添加了Manager 通用业务处理层。
优点:相比于三层方式,添加了通用处理层对接外部平台。 上下游对接划分的比较清晰
缺点:核心业务逻辑层没有划分
适应场景:业务逻辑不复杂的常用业务
在这里插入图片描述

另外一种讲解方法:
在这里插入图片描述
通用业务处理层,它有如下特征:

  • 对第三方平台封装的层,预处理返回结果及转化异常信息。
  • 对Service层通用能力的下沉,如缓存方案、中间件通用处理。
  • 与DAO层交互,对多个DAO的组合复用。

其各层的作用如下:

  • 终端显示层:各端模板渲染并执行显示的层。当前主要是Velocity渲染,JS渲染, JSP渲染,移动端展示等。
  • 开放接口层:将Service层方法封装成开放接口,同时进行网关安全控制和流量控制等。
  • Web层:主要是对访问控制进行转发,各类基本参数校验,或者不复用的业务简单处理等。
  • Service层:业务逻辑层。
  • Manager层:通用业务处理层。
  • DAO层:数据访问层,与底层 MySQL、Oracle、HBase 等进行数据交互。
  • 外部接口或第三方平台:包括其它部门RPC开放接口,基础平台,其它公司的HTTP接口。

6.DDD分层架构?

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

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

一、特点:

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

优点:相比于三层方式,更关注领域服务,即业务核心逻辑的划分、收敛
缺点:分层复杂, 如果业务逻辑简单没有必要
适应场景:业务复杂的业务
在这里插入图片描述

  • 接口层(Interfaces):该层包含与其他系统交互的所有内容,如Web服务器、RESTful接口。接口层处理传入数据的解释、校验、编解码、序列化操作,同时可以考虑引入专门的DTO(数据转换对象)来协助数据转换;

  • 应用层(Application):该层负责驱动应用程序完成工作流程。很薄一层,协调多个领域对象(实体、聚合根、领域服务)实现服务编排和组合完成工作流,该层通常不应该包含具体业务逻辑。该层涉及:其他微服务RPC调用、微服务编排和组合、分布式事务实现、消息驱动事件的驱动、日志记录等。

  • 领域层(Domain):该层是软件的核心,包含业务逻辑具体实现,包含实体、值对象、聚合、领域服务、仓储接口等领域对象内容,通常该层应该配备图示告知软件是如何工作的;

  • 基础层(Infrastructure):包含网关、缓存、数据库存储、消息中间件、监控、应用程序服务等通用的技术和基础服务。基础层以不同方式支持到其他三层,促进各层间通信。配置文件、数据库Schema模式定义以及仓储接口实现都是基础结构的一部分;

二、和传统三层架构的对比

DDD四层架构也基于传统三层架构的,不同点有以下几方面:

  • 关注点不一样:三层架构关注请求调用顺序;DDD架构关注领域服务。
  • 横向划分方式不一样:三层架构主要关注纵向划分,对横向划分没有约定;DDD架构更关注纵向,即:多个领域层之间划分及交互方式。
  • 对资源的定位不一样:三层架构把所有依赖的数据都放到数据访问层;DDD架构只将领域强关联的数据放到Repository中,其他比如API层缓存、文件等都当成基础服务来处理。
    在这里插入图片描述

7.整洁架构和六边形架构?

整洁架构和六边形架构都是DDD架构的一种方式,只不过是视角不同。

(1)整洁架构
特点:整洁架构的层就像洋葱片一样,它体现了分层的设计思想

整洁架构最主要的原则是依赖原则,它定义了各层的依赖关系,越往里依赖越低,代码级别越高,越是核心能力。外圆代码依赖只能指向内圆,内圆不需要知道外圆的任何情况。

在这里插入图片描述

(2)六边形架构
六边形架构又名“端口适配器架构”。追溯微服务架构的渊源,一般都会涉及到六边形架构。

六边形架构的核心理念是:应用是通过端口与外部进行交互的。我想这也是微服务架构下API网关盛行的主要原因吧。

也就是说,在下图的六边形架构中,红圈内的核心业务逻辑(应用程序和领域模型)与外部资源(包括APP、Web应用以及数据库资源等)完全隔离,仅通过适配器进行交互。它解决了业务逻辑与用户界面的代码交错问题,很好地实现了前后端分离。六边形架构各层的依赖关系与整洁架构一样,都是由外向内依赖。
在这里插入图片描述
参考:(站在巨人的肩膀上才能看得更远)
1、https://blog.51cto.com/u_15265637/2898534
2、https://juejin.cn/post/6974541599636193287

计算机网络分层及相关协议解析
09-22
计算机网络分层是计算机网络的基础架构,定义了网络的七层框架。OSI(Open System Interconnect)即开放式系统互联,是ISO组织在1985年研究的网络互联模型。该体系结构标准定义了网络互联的七层框架。 第一层:物理...
架构模式之分层架构总结
04-20 3163
背景一个问题,我们要把它搞清楚。需要深入的思考,从演进出发,从核心出发,探索它的本质。这样才能在工作中举一反三。探索本质的思想,对于架构者来说尤其重要。本文想探讨架构模式之分层设计的本质和...
系统架构分层架构
一鸣惊人的博客
01-17 3806
软件在从0到1阶段,软件分层不是此阶段需要重点考虑的范畴,在从1到100..0阶段,由于软件耦合严重,软件分层将会提到日程。软件分层就是基于分而治之思想下发展而来的,将复杂系统拆分成功具有单一职责层次的方法论。本文为大家介绍了什么是分层?为何要分层?如何对软件进行分层?软件分层有什么指导原则呢?希望大家基于分层范式,可以做到修改模块内的代码,而不影响其他模块,这是软件分层给我们带来的优势。也是高内聚低耦合的特性。
【软件架构分层架构简介
最新发布
weixin_46453070的博客
03-26 930
1、分层架构简介2、工作原理3、优点4、缺点5、举例6、分层架构和单体架构区别分层架构定义特点单体架构定义特点主要区别分层架构是一种将应用程序划分为互相隔离的多个层的软件架构模式,每层负责不同的应用程序功能。这种架构风格主要目的是促进关注点的分离,提高应用程序的组织性、可维护性和可扩展性。分层架构通常包括表示层(或用户界面层)、业务逻辑层、持久层(或数据访问层)等,每层只与紧邻的上下层交互。分层架构将应用程序划分为逻辑上的几个层次,每一层负责不同的职责。
操作系统结构
黄先生的博客
03-22 3968
操作系统中的分层法是指将操作系统的不同功能层次划分为若干个层次,每个层次提供一些特定的功能,上层调用下层提供的接口来完成自己的功能。通过分层法,操作系统的功能被分散到不同的层次中,每层只需实现自己的特定功能,从而更好地实现了系统应用程序的模块化设计,利于软件维护。微内核架构,是指将内核中最基本的功能保留在内核,而将那些不需要的核心态执行的功能移到用户态支撑,从而降低内核的设计复杂性。一个故事:现在,应用程序想要请求操作系统的服务,这个服务的处理同时涉及到进程管理、存储 管理、设备管理。
架构师修炼系列【分层架构
Davieyang.D.Y
09-16 2万+
分层架构是很常见的架构模式,它也叫N层架构,通常情况下, N至少是2 层。例如,C/S架构、B/S 架构 常见的是3层架构(例如,MVC 、MVP架构)、4层架构,5层架构的比较少见,一般是比较复杂的系统才会达到或超过5层,比如操作系统内核架构
架构1.分层架构,什么是分层架构
ge2468的博客
11-03 7865
分层架构模式里的组件被分成几个平行的层次,每一层都代表了应用的一个功能(展示逻辑或者业务逻辑)。尽管分层架构没有规定自身要分成几层几种,大多数的结构都分成四个层次:展示层,业务层,持久层,和数据库层。 常见的图如下 复杂一点的分层架构图如下 分层架构的特点: 1. 分层架构中的每一层都着特定的角色和职能。 比如说展示层并不需要关心怎样得到用户数据,它只需在屏幕上以特定的格式展示信息。业务层并不关心要展示在屏幕上的用户数据格式,也不关心这些用户数据从哪里来。它...
架构师基本功】分层架构
Java程序员廖志伟
06-28 792
其中,表示层负责接收用户请求和输出响应结果,业务逻辑层是分层架构的核心层,负责处理业务逻辑,实现系统的核心功能,数据访问层则负责处理数据的存储和访问。业务逻辑层通常是由多个服务组成,每个服务实现一个特定的业务逻辑,服务之间可以相互调用,形成一个系统的完整业务流程。在调用外部API和服务时,需要验证身份。例如,在电商系统中,购物车中的商品数量可能需要限制,每个用户可能需要限制购买的商品数量等。在设计业务逻辑层时,必须保证其独立性和可扩展性,避免对其他层的依赖,以及确保未来的需求变更可以容易地进行维护和扩展。
分层架构完整刨析,一个例子带你深入了解
weixin_57316880的博客
06-22 3039
分层架构完整刨析,一个例子带你深入了解
系统架构系统分层和数据分层
一鸣惊人的博客
05-15 4154
分层化,业务分层,数据分层,数据模型,VO(Value Object),PO(Persistant Object) 持久对象,DO(Data Object) 数据对象,DTO( Data Transfer Object) 数据传输对象,BO(Business Object) 业务对象。
什么是分层架构
微微的猪食小窝
11-28 2119
分层架构是将软件模块按照水平切分的方式分成多个层,一个系统由多层组成,每层由多个模块组成。同时,每层有自己独立的职责,多个层次协同提供完整的功能。比如,我们经常提到的MVC架构,就是一种非常典型非常基础的分层方式。分层设计的本质其实就是将复杂问题简单化,基于单一职责原则让每层代码各司其职,基于“高内聚,低耦合”的设计思想实现相关层对象之间的交互。从而,提升代码的可维护性和可扩展性。
全面的门户网站架构设计方案.doc
12-25
2.2 总体架构 2.2.1 网站的系统分层架构 2.2.2 网站的物理架构 2.2.3 网站的开发架构 2.2.4 网络拓扑结构 备注: 1) 采用双防火墙双交换机做网络冗余,保障平台服务 采用双防火墙通知接通2线路互联网接入,设备之间...
IEC61850规约在电力系统中的应用.pdf
08-30
IEC61850规约的特点是面向对象建立模型,使用XML语言,整个系统的所有架构都是采用分布式分层结构,使用抽象的通讯接口和通信服务映射Scsm技术,采用MMS技术。该规约强调的是开放性和兼容性。 IEC61850规约的应用...
一文解析数据治理体系方法.docx
10-02
通过分层架构表达对数据的分类和定义,厘清数据资产。 技术架构与数据交换 技术架构与数据交换数据共享交换面向数据交换全生命周期管理,提供多类型的资源共享通道,打通各交换节点之间的数据壁垒,保证各交换节点...
现代交换技术课后答案解析.doc
09-29
本文档为现代交换技术课后答案解析,涵盖了交换技术的基本概念、网络分层模型、交换方式、信令系统等方面的知识点。 全互连式网络的特点和缺点 全互连式网络是一种把所有终端两两相连的网络结构。其特点是每个用户...
分层架构与数据通信基础
学Java,找哪吒
07-29 5229
一、分层架构相关概念 网络体系结构是从功能上描述计算机网络结构。 计算机网络体系结构简称网络体系结构是分层结构。 每层遵循某个网络协议以完成本层功能。 计算机网络体系结构是计算机网络的各层及其协议的集合。 第n层在向第n+1层提供服务时,此服务不仅包含第n层本身的功能,还包含由下层服务提供的功能。 仅仅在相邻层间有接口,且所提供服务的具体实现细节对上一层完全屏蔽。 体系结构是抽象的,而实现是指能运行的一些软件和硬件。 二、认识分层结构 1、实体 第n层中的活动元素称为n层实体。同一层的实
软件架构模式之分层架构
热门推荐
Mr.Simple的专栏
04-19 4万+
对程序员来说很常见一种情况是在没有合理的程序架构时就开始编程,没有一个清晰的和定义好的架构的时候,大多数开发者和架构师通常会使用标准式的传统分层架构模式(也被称为多层架构)——通过将源码模块分割为几个不同的层到不同的包中。不幸的是,这种编码方式会导致一系列没有组织性的代码模块,这些模块缺乏明确的规则、职责和同其他模块之间的关联。这通常被称为架构大泥球。
软件架构(五)分层架构
博客园搬家测试账号
09-15 741
零几年最早接触编程时,写的课程设计就是MVC架构,这就是一种典型的分层架构。 一、分层概念 分层是一种常见的根据系统中的角色/职责拆分和组织代码单元的常规实践。注:本文说的不单指后端架构,而是整个软件的分层架构,包含前端、后端、数据库。 在一个分层系统中,每一层: 依赖它之下的层; 和它之上的层无关,对使用(依赖)它的层次无感知。 在分层架构中,分层可以访问它之下的任何分层。 二、分层历...
分层架构浅析
hn2002的专栏
08-24 1121
分层架构浅析
超市管理系统分层架构
05-04
是的,超市管理系统可以使用分层架构分层架构是一种常见的软件架构,它将整个系统分成多个层次,每个层次都有特定的功能和责任,且彼此之间相互独立。在超市管理系统中,可以将数据层、业务逻辑层、展示层等划分成不同的层次,以便更好地管理和维护系统。例如,数据层负责数据的存储和访问;业务逻辑层负责处理业务逻辑;展示层负责用户界面的呈现和交互等。通过分层架构的设计,可以提高系统的可维护性、可扩展性、可重用性等方面的优势。

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 系统分层架构的全面解析 12692
  • 项目中使用多线程的场景 6724
  • ORM框架你了解多少? 5052
  • 降低数据库压力的方法 2446
  • 你真的懂peek方法嘛? 793

分类专栏

  • 问题 3篇
  • leetcode刷题 1篇
  • grunt 1篇
  • Java 16篇

最新评论

  • 项目中使用多线程的场景

    azoker: 受用了

  • 系统分层架构的全面解析

    zgw610722: 还得是你啊

  • 项目中使用多线程的场景

    TL_away: 举例很清晰,学习到了

  • Java基础练习五十题第二题

    惊鸿难定: [code=java] public static boolean ifSuShu(int i){ int sqrt = (int)Math.sqrt(i); //把i开根 boolean flag = true; // 声明一个一个布尔类型的变量 值为true for(int n = 2; n <= sqrt; n++){ //循环 从2开始到 i的平方根 if(i % n == 0){ //如果 i 模上 n 余数为 0 ; flag = false; //那么把false 赋值给flag 那么i不是素数 break; //结束 } } return flag; } [/code]

  • Java基础练习五十题第二题

    惊鸿难定: 返回值太早了 如果是15 21 25。。。。呢?

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • 大名鼎鼎的Restful,你到底知道多少?
  • RPC,你知道多少呢?
  • 【Java8】默认方法
2021年12篇
2020年7篇
2019年1篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

深圳SEO优化公司海南网站建设报价池州网站排名优化哪家好大同关键词排名包年推广报价马鞍山网站优化按天扣费报价中山百度网站优化无锡百度网站优化排名公司鞍山网站优化按天收费公司忻州百度seo多少钱绵阳seo北京品牌网站设计哪家好塔城百姓网标王公司大庆网站排名优化公司淄博推广网站哪家好南山百度竞价哪家好龙岗网站关键词优化多少钱宣城网站seo优化公司迪庆百度标王哪家好抚顺网站推广系统多少钱抚顺网站建设设计推荐许昌网站seo优化公司福田品牌网站设计多少钱随州建网站多少钱石岩网站关键词优化长葛网站建设公司保山seo网站优化公司惠州关键词按天收费报价黑河网站优化按天收费推荐吴忠seo价格本溪网站优化软件推荐毕节网站优化按天收费公司歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化