不过时的经典层架构

news2024/11/16 13:40:27

在《设计服务要考虑的7个维度》中讲到设计一定要把不稳定的部分做封装。今天咱们就从这个角度重新审视一下经典的四层架构。

73f71f8243d042bc89b934a4fa323bbd.png

上面是一个经典层架构的示意图。这个架构大多数的公司和项目都在直接用,或者用其变体。

比如,某大厂上层Client客户端可能是电商、团购等,Business Logic业务逻辑层包含金融支付、收单和积分等业务,Resource Access 资源访问层是各种中间件,Resource 是数据库、块存储等。贯穿始终的是旁边的Utilities工具条,包含不限于日志、监控和告警。

坦白讲,我研究过的大厂,就没见过哪个本质上架构不是这样的。只不过根据理解的深度,层级可能会划分得更细。

下面来聊聊每一层都封装了哪些不稳定部分,简便来说,咱们称之为:易变性。

客户端层

你的系统现在或者将来可能会增加新的客户端,比如作为桌面应用、门户网站、移动APP、全息图、增强现实。

以下是在漫威电影中经常见到的全息影像技术,这个技术在上世纪70年代就已经实现了。目前在一些商店、艺术中心可以见到,将来它会成为一种更为常见的客户端技术。

45dea5d7e6bca61df117ab7bd227d241.png

与全息图一样越来越广泛应用的客户端技术还有上世纪五六十年代发明的增强现实技术,如下图:

18c4b2a6dbdfb0c444d54390be40f482.png

不同的客户端应用会使用不同的技术,部署方式不同、版本不同,生命周期不同,研发团队不同。实际上,客户端层是一个典型软件系统最易变的部分。所以需要将其易变性封装到客户端层不同的模块中,一个改变不影响其他。

业务逻辑层

业务逻辑层实现的是需要的行为,可以表述为使用案例。如果你的使用案例是静态的,其实根本不需要这一层。但是我们多数见到的使用案例都是动态的。因为我们的用户在变,时间也在改变。

使用案例的变化只有两种方式:要不就是行为的序列变了,要不就是行为变了。举个例子:用户在团购网站下单,订单完成支付,本来是只有积分的:

786ff42a9e5724eb596fd90c81cac7ba.png

后来增加赠送游戏道具,这就是行为变了:

81d7e31022b97df4108ec2178f5eaf74.png

由于用户对道具的增加比较关注,延时有要求,同时,随着新上线游戏的增多,其他游戏也可能和下单关联送道具。所以由串行执行序列改成并行执行:

5704fb432d3b622ea73428c25ea08864.png

行为的序列,我们称之为管理者;行为本身我们称之为引擎。一个管理者可能会使用多个引擎,一个引擎也可能会多个管理者之间共享。

资源访问层

资源访问层通俗来讲就是我们常说的类似CRUD这种IO操作。一个设计良好的资源访问层组件封装的都是对于资源的原子性处理。同时,资源访问层服务是可以同时被管理者和引擎之间共享的。如果一个资源访问层服务组件只有一个服务在使用,可能说明这个组件没有被设计好。

资源层

资源层包含系统依赖的物理资源,例如:数据库、文件系统、缓存或者消息队列。资源可以在系统内部或者成为独立系统,但是对你的系统来说,它只是资源。

工具条

最上面图中的垂直工具条可能是所有系统都需要的,包含安全、日志、分析、消息总线、托管和监控大屏。

本文咱们从封装易变性的角度重新审视了经典的层级架构。下次咱们从分类的角度看怎么做才能更好的封装易变性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/671049.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

安卓蓝牙GATT协议介绍

前言 现在低功耗蓝牙(BLE)连接都是建立在 GATT (Generic Attribute Profile) 协议之上。GATT 是一个在蓝牙连接之上的发送和接收很短的数据段的通用规范,这些很短的数据段被称为属性(Attribute)。 GAP 详细介绍 GAT…

GBASE金融信创优秀解决方案鉴赏 · 核心业务系统数据库解决方案

为此,实验室特别开设金融信创优秀解决方案专栏,集中展示优秀成果。现在,让我们一起来领略下GBASE的优秀解决方案吧~可点击阅读原文 →《金融信创优秀解决方案--核心业务系统数据库解决方案》。 核心业务系统数据库解决方案 方案简介 随着技…

Android Qcom USB Driver学习(十三)

该系列文章总目录链接与各部分简介: Android Qcom USB Driver学习(零) Android Qcom USB Driver学习(八) Android Qcom USB Driver学习(九) UCSI USB Type-C Connector System Software Interface Specification DPM Device Policy Manager deals with the USB P…

智安网络|驾驭数字化转型时代:加速业务转型的战略

随着科技的飞速发展和数字化时代的到来,企业面临着前所未有的机遇和挑战。数字化正在改变着商业的方方面面,而那些能够及时适应和把握这些变化的企业将脱颖而出。因此,加速企业转型成为了当务之急。 一、为什么需要加速企业转型 1.全球市场竞…

D. Pairs of Segments(最大不相交区间数量)

Problem - D - Codeforces 给定一个由n个线段组成的数组[[l1,r1],[l2,r2],…,[ln,rn]],其中每个线段用左右端点表示。如果存在至少一个x满足l1≤x≤r1且l2≤x≤r2,则称线段[l1,r1]和[l2,r2]相交。 如果k为偶数,并且可以将该数组的元素分成k/…

VTK裁剪【3】-vtkClipPolyDatavtkPolyPlane问题

前言:本博文主要记录vtkClipPolyData中采用vtkPolyPlane作为裁剪工具时的出现的问题,供各位小伙伴进行参考,避免踩坑! 目录 vtkPolyPlane介绍及作用 vtkClipPolyData原理 实现流程: 问题所在: 需求&…

css绘制网格背景

文章目录 前言效果图说明 前言 本篇文章主要简单扼要的去实现css网格背景,并进一步探求其应用原理 效果图 css代码 body::before, body::after {position: fixed;top: 0;left: 0;right: 0;bottom: 0;content: ;background-repeat: repeat;pointer-events: none;o…

企业特权密码管理

随着企业中特权帐户的激增,必须保护的密码数量也大幅增长。跟踪所有这些密码是一项艰巨的任务,为避免敏感密码管理不善,管理员需要在集中式存储库下清点属于所有部门的密码,并管理对它们的直接控制。 部署PMP的好处 PMP是一个安…

Baumer工业相机堡盟工业相机如何使用新版本NEOAPI SDK控制相机数据流的开启和关闭(C#)

Baumer工业相机堡盟工业相机如何使用新版本NEOAPI SDK控制相机数据流的开启和关闭(C#) Baumer工业相机Baumer工业相机NEOAPI SDK的技术背景Baumer工业相机使用NEOAPISDK控制相机数据流的方式1.引用合适的类文件2.使用NEOAPISDK控制相机数据流的方式2.使用…

市场模式下光伏用户群的电能共享与需求响应模型(matlab代码)

目录 1 主要内容 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序复现文章《市场模式下光伏用户群的电能共享与需求响应模型》,为了使光伏用户群内各经济主体能实现有序的电能交易,提出了一种基于光伏电能供需比(SDR)的内…

JavaScript实现伪随机正态分布

💂 个人网站:【海拥】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 目录 前言什么是正态分布&am…

Jenkins+Allure+Pytest的持续集成

一、配置 allure 环境变量 1、下载 allure是一个命令行工具,可以去 github 下载最新版:https://github.com/allure-framework/allure2/releases 如果你想学习Pytest自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全…

图扑智慧地下采矿,“像素游戏”智能呈现

在这个像素世界里,我们需要一个智能地下采矿可视化综合管理平台,来帮助我们管理和监控地下采矿全流程。 图扑软件依托自主研发的 HT for Web 产品,结合三维定制化渲染、动态模拟、物理碰撞、5G、物联网、云计算及大数据等先进技术&#xff0c…

vue+leaflet笔记之热力图

vueleaflet笔记之热力图 文章目录 vueleaflet笔记之热力图开发环境代码简介插件简介与安装使用简介 详细源码(Vue3) 本文介绍了Web端使用 Leaflet开发库展示热力图方法 (底图来源:天地图),结合leaflet.heat插件可以很容易的做出热力图,通过调整其配置参…

旧系统重构遇到的种种问题

首先我将原来springboot版本升级到2.7.9,spring的docker分层和启动受到了影响,这个在docker镜像大小问题已经讲过,不再赘述,因为维护的人变成为一个人,因此我需要将各代码的版本进行统一,方便维护。 5 sun.…

数据治理(数据模型,数据规范,数据安全,数据成本,元数据,数据质量等)

数据治理是什么?为什么要做数据治理?关于数据治理我们需要做什么? 数据治理无论是在数仓建设过程中还是数仓建设完成之后都是及其重要的,是数据部门基础建设的必经之路,是降本提效,形成企业数据资产的关键一环 一 数据质量管理 1.1 数据质量基本概念 ●数据质量管理(Dat…

【Java-SpringBoot+Vue+MySql】Day3.1-SpringBoot Web开发

目录 前期回顾——SpringBoot与Maven 一、web入门 1、知识点密集区 (1)spring web依赖 (2)控制器 ​ (3)路由映射 (4)URL映射 (5)Method匹配​编辑 (6&#xff09…

一种基于FPGA的雷达综合显示模块技术方案

一、项目整 这是我们做过的一个项目,若有需求,请联系我。开放PCB和软件技术。 以FPGA为核心,开发设计具有多路图像/视频采集、处理、传输、显示等功能的嵌入式视频模块。可对多路SerDes接口输入的高速串行视频流数据进行解析,将…

NSSCTF MOBILE [SWPU 2019]easyapp 详细题解

文章目录 一. 前言二. 安装安卓SDK三. 安装安卓模拟器(推荐夜神模拟器)四. 安装frida和objection五. 解题过程六. 总结 一. 前言 题目地址:[SWPU 2019]easyapp大佬题解[SWPU 2019]easyapp pwjcw的WriteUp 大佬的题解很简单,直接hook就可以看到返回值,但是我看了半天没看明白是…

通过源码分析为什么不推荐使用Executors线程池

线程池是 Java 并发编程中不可缺少的一部分。JDK 提供了一个方便快捷的线程池工具类 Executors,提供了多种创建线程池的静态方法,但是在实际使用中,我们不建议直接使用 Executors 提供的线程池工具类。本篇博客将通过分析 Executors 源码&…