系统架构设计高级技能 · 层次式架构设计理论与实践
系列文章目录
系统架构设计高级技能 · 软件架构概念、架构风格、ABSD、架构复用、DSSA(一)【系统架构设计师】
系统架构设计高级技能 · 系统质量属性与架构评估(二)【系统架构设计师】
系统架构设计高级技能 · 软件可靠性分析与设计(三)【系统架构设计师】
现在的一切都是为将来的梦想编织翅膀,让梦想在现实中展翅高飞。
Now everything is for the future of dream weaving wings, let the dream fly in reality.
系统架构设计高级技能 · 层次式架构设计理论与实践
- 系列文章目录
- 一、层次式体系结构概述
- 1.1 定义
- 1.2 层次式应用的组成
- 1.3 特点与注意事项
- 二、表现层框架设计
- 2.1 MVC(Model-View-Controller)模式
- 2.2 MVP(Model-View-Presenter)模式
- 2.3 MVVM(Model-View-ViewModel )模式
- 三、中间层框架设计
- 3.1 业务逻辑层组件设计
- 3.2 业务逻辑层工作流设计
- 3.3 业务逻辑层实体设计
- 3.4 业务逻辑层框架
- 四、数据访问层框架设计
- 4.1 数据访问模式
- 4.2 工厂模式在数据数据访问层的应用
- 4.3 ORM,Hibernate与CMP2.0设计思想
- 4.4 XML Schema
- 4.5 事务处理设计
- 4.6 连接对象管理设计
- 五、数据架构规划与设计
- 5.1 数据库与类的设计融合
- 5.2 数据库设计与XML设计融合
- 六、物联网层次架构设计

一、层次式体系结构概述
1.1 定义
软件体系结构可定义为:软件体系结构为软件系统提供了结构、行为和属性的高级抽象,由构成系统的元素描述、这些元素的相互作用、指导元素集成的模式以及这些模式的约束组成。软件体系结构不仅指定了系统的组织结构和拓扑结构,并且显示了系统需求和构成系统的元素之间的对应关系,提供了一些设计决策的基本原理,是构建于软件系统之上的系统级复用。
分层式体系结构是一种最常见的架构设计方法,能有效地使设计简化,使设计的系统机构清晰,便于提高复用能力和产品维护能力。层次式体系结构设计是将系统组成一个层次结构,每一层为上层服务,并作为下层客户。在一些层次系统中,除了一些精心挑选的输出函数外,内部的层接口只对相邻的层可见。连接件通过决定层间如何交互的协议来定义,拓扑约束包括对相邻层间交互的约束。由于每一层最多只影响两层,同时只要给相邻层提供相同的接口,允许每层用不同的方法实现,同样为软件
重用提供了强大的支持。
1.2 层次式应用的组成

1.3 特点与注意事项
二、表现层框架设计
2.1 MVC(Model-View-Controller)模式
MVC是一种软件设计模式。MVC把一个应用的输入、处理、输出流程按照视图、控制、模型的方式进行分离,形成了控制器、模型、视图3个核心模块,其中:
(1)控制器(Controller):接受用户的输入,并调用模型和视图去完成用户的需求。
(2)模型(Model):应用程序的主体部分,表示业务数据和业务逻辑。
(3)视图(View):用户看到并与之交流的界面。
如图,三者协作关系:

使用MVC模式来设计表现层,可以有以下优点:
(1)允许多种用户界面的扩展。
(2)易于维护。
(3)易于构件功能强大的用户界面。
(4)增加应用的可拓展性、强壮性、灵活性。
2.2 MVP(Model-View-Presenter)模式
在MVP模式中Model提供数据,View负责显示,Controller/Presenter负责逻辑处理。MVP不仅仅避免了View和Model之间的耦合,还进一步降低了Presenter对View的依赖。
如图,MVP设计模式:

使用MVP模式来设计表现层,可以有以下的优点:
(1)模型与视图完全分离,可以修改视图而不影响模型。
(2)所有的交互都发生在一个地方 - Presenter内部,因此可以更高效地使用模型。
(3)可以将一个Presenter用于多个视图,而不需要改变Presenter的逻辑。因为视图的变化总是比模型的变化频繁。
(4)如果把逻辑放在Presenter中,就可以脱离用户接口来测试这些逻辑(单元测试)。
2.3 MVVM(Model-View-ViewModel )模式
MVVM和MVC、MVP类似,主要目的都是为了实现视图和模型的分离。不同的是MVVM中,View和Model的交互通过ViewModel来实现,也就是View和Model不能直接通信,两者的通信只能通过ViewModel来实现。ViewModel是MVVM的核心,通过DataBinding实现View与Model之间的双向绑定,其内容包括数据状态处理、数据绑定及数据转换。
如图,MVVM设计模式:

三、中间层框架设计
3.1 业务逻辑层组件设计
业务逻辑层组件分为接口和实现类两个部分。接口用于定义业务逻辑组件,定义业务逻辑组件必须实现的方法是整个系统运行的核心。通常按模块来设计业务逻辑组件,每个模块设计一个业务逻辑组件,并且每个业务逻辑组件以多个数据访问对象(Data Access Object,DAO)组件作为基线,从而实现对外提供系统的业务逻辑服务。
3.2 业务逻辑层工作流设计
工作流管理联盟(Workflow Management Coalition,WFMC)将工作流定义为:业务流程的全部或部分自动化,在此过程中,文档、信息或任务按照一定的过程规则流转,实现组织成员间的协调工作已达到业务的整体目标。
如图,工作流参考模型:

3.3 业务逻辑层实体设计
逻辑层实体提供对业务数据及相关功能(在某些设计中)的状态编程访问。业务逻辑层实体可以使用具有复杂架构的数据构建,这种数据通常来自数据库中的多个相关表。业务逻辑层实体数据可以作为业务过程的部分I/O参数传递。业务逻辑层实体是可序列化的以保持他们的当前状态。
3.4 业务逻辑层框架
业务逻辑框架位于系统架构的中间层,是实现系统功能的核心组件。采用容器的形式,便于系统功能的开发、代码重用和管理。在业务容器中,业务逻辑是按照Domain Model-Service-Contro思想来实现的。其中:
(1)Domain Model是仅仅包含业务相关的属性的领域层业务对象。
(2)Service是业务过程实现的组成部分,是应用程序的不同功能单元,通过在这些服务之间定义良好的接口和契约联系起来。
(3)Control服务控制器,是服务之间的纽带,不同服务之间的切换就是通过它来实现的。
四、数据访问层框架设计
4.1 数据访问模式
(1)在线访问
(2)Data Access Object
(3)Data Transfer Object
(4)离线数据模式
(5)对象/关系映射
4.2 工厂模式在数据数据访问层的应用
这就需要在实际开发过程中将这些数据库访问类再作一次封装。经过这样的封装,不仅可以达到上述的目标,还可以减少操作数据库的步骤,减少代码编写量。工厂设计模式是使用的主要方法。
工厂模式定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。这里可能会处理对多种数据库的操作,因此,需要首先定义一个操纵数据库的接口,然后根据数据库的不同,由类工厂决定实例化哪个类。
4.3 ORM,Hibernate与CMP2.0设计思想
ORM(Object-Relation Mapping) 在关系型数据库和对象之间作一个映射,这样,在具体操纵数据库时,就不需要再去和复杂的 SQL语句打交道,只要像平时操作对象一样操作即可。当开发一个应用程序的时候(不使用OR Mapping), 可能会涉及许多数据访问层的代码,用来从数据库保存、删除和读取对象信息等,然而这些代码写起来总是重复的。一个更好的办法就是引入OR Mapping。 实质上,一个 OR Mapping会生成DAL。 与其自己写DAL代码,不如用OR Mapping, 开发者只需要关心对象就好。
4.4 XML Schema
XML Schema用来描述XML文档合法结构、内容和限制。 XML Schema由XML 1.0 自描述,并且使用了命名空间,有丰富的内嵌数据类型及其强大的数据结构定义功能,充分地改造了并且极大地扩展了 DTDs (传统描述XML文档结构和内容限制的机制)的能力,将逐步替代DTDs, 成为 XML体系中正式的类型语言,同 XML 规范、 Namespace 规范一起成为XML体系的坚实基础。
4.5 事务处理设计
事务是现代数据库理论中的核心概念之一。如果一组处理步骤或者全部发生或者一步也不执行,我们称该组处理步骤为一个事务。当所有的步骤像一个操作一样被完整地执行,我们称该事务被提交。由于其中的一部分或多步执行失败,导致没有步骤被提交,则事务必须回滚(回到最初的系统状态)。事务必须服从 ISO/IEC所制定的ACID原则。 ACID是原子性(Atomicity)、 一致性(Consistency)、 隔离性 (Isolation) 和持久性 (Durability) 的缩写。事务的原子性表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。一致性表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态。隔离性表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见。持久性表示已提交的数据在事务执行失败时,数据的状态都应该正确。
4.6 连接对象管理设计
对于共享资源,有一个很著名的设计模式——资源池。该模式正是为了解决资源频繁分配、释放所造成的问题。把该模式应用到数据库连接管理领域,就是建立一个数据库连接池,提供一套高效的连接分配、使用策略。建立连接池的第一步,就是要建立一个静态的连接池。所谓静态,是指池中的连接是在系统初始化时就分配好的,并且不能够随意关闭。有了这个连接池,下面就可以提供一套自定义的分配、释放策略。当客户请求数据库连接时,首先看连接池中是否有未分配出去的连接。如果存在空闲连接则把连接分配给客户,并作相应处理。
五、数据架构规划与设计
5.1 数据库与类的设计融合
对类和类之间关系的正确识别是数据模型的关键所在。本节将讨论如何发现、识别以及描述类。要想将建模过程缩减为一个简单的、逐步进行的过程是不太可能的。从本质上讲,建模是一项艺术。对一个给定的复杂情况而言,不存在唯一正确的数据模型,然而却存在好的数据模型。一个企业或机构的某个数据模型可能会优于另一个数据模型,但就如何为一个特定的系统建立数据模型,却没有唯一的解决方案。
好模型的目标是将工程项目整个生存期内的花费减至最小,同时也会考虑到随时间的推移系统将可能发生的变化,因而设计时也要考虑能适应这些变化。因此,将目光集中在最大限度地降低开发费用上是一个错误。
5.2 数据库设计与XML设计融合
XML文档分为两类:一类是以数据为中心的文档,这种文档在结构上是规则的,在内容上是同构的,具有较少的混合内容和嵌套层次,人们只关心文档中的数据而并不关心数据元素的存放顺序,这种文档简称为数据文档,它常用来存储和传输 Web 数据。另一类是以文档为中心的文档,这种文档的结构不规则,内容比较零散,具有较多的混合内容,并且元素之间的顺序是有关的,这种文档常用来在网页上发布描述性信息、产品性能介绍和 E-mail信息等。
XML文档的存储方式有两种:基于文件的存储方式和数据库存储方式。
六、物联网层次架构设计
-
(1)感知层:
感知层用于识别物体、采集信息。感知层包括二维码标签和识读器、 RFID标签和读写器、摄像头、 GPS、 传感器、 M2M 终端、传感器网关等,主要功能是识别对象、采集信息,与人体结构中皮肤和五官的作用类似。 -
(2)网络层:
网络层用于传递信息和处理信息。网络层包括通信网与互联网的融合网络、网络管理中心、信息中心和智能处理中心等。网络层将感知层获取的信息进行传递和处理,类似于人体结构中的神经中枢和大脑。 -
(3)应用层:
应用层实现广泛智能化。应用层是物联网与行业专业技术的深度融合,结合行业需求实现行业智能化,这类似于人们的社会分工。
相关文章:
系统架构设计高级技能 · 层次式架构设计理论与实践
系列文章目录 系统架构设计高级技能 软件架构概念、架构风格、ABSD、架构复用、DSSA(一)【系统架构设计师】 系统架构设计高级技能 系统质量属性与架构评估(二)【系统架构设计师】 系统架构设计高级技能 软件可靠性分析与设计…...
Nuxt3打包部署到Linux(node+pm2安装和运行步骤+nginx代理)
最近,我们项目组的工作接近尾声,需要把项目部署上线。由于前端第一次使用Nuxt3框架,后端也是第一次部署Nuxt3项目,所以刚开始出现了很多问题。在我上网搜索很多教程后,得到了基本的流程。 1.服务器安装node.js环境 N…...
一维数组传参
在C语言中,可以通过指针来传递一维数组。一维数组实际上是指向数组首元素的指针,在函数中传递数组参数时,可以将数组名作为指针传递给函数。以下是一个示例: #include <stdio.h>void myFunction(int arr[], int size) {for…...
七层、四层和五层网络模型区别和联系
七层、四层和五层网络模型区别和联系 概述OSI网络7层模型(概念型框架)概述图片分析 四层模型概述常用协议OSI与TCP/IP四层的区别 五层模型概述三种网络模型对比 总结 概述 网络模型-七层模型(OSI模型)、五层协议体系结构和TCP/IP…...
RH1288V3 - 初识物理服务器
如果你拥有一台物理服务器(不是云服务器) 个人比较推荐你用物理服务器,虽然性能会比云要来的差,但是不用每月交钱上。云服务固然方便,但是几个核的性能和一点存储,想做一个动漫网站固然要很多mp4这种影视资源,云服务器…...
excel中如果A列中某项有多条记录,针对A列中相同的项,将B列值进行相加合并统计
excel中如果A列中某项有多条记录,针对A列中相同的项,将B列值进行相加合并统计。注意:B列的数据类型要为数字 如: 实现方法: C1、D1中分别输入公式,然后下拉 IF(COUNTIF($A$1:A1,A1)1, A1,"") …...
开发智能应用的新范式:大数据、AI和云原生如何构建智能软件
文章目录 1.利用大数据实现智能洞察2. 集成人工智能和机器学习3. 云原生架构的弹性和灵活性4. 实现实时处理和响应5. 数据安全和隐私保护6. 可解释性和透明性7. 持续创新和迭代8. 数据伦理和合规性 🎈个人主页:程序员 小侯 🎐CSDN新晋作者 &a…...
淘宝免费爬虫数据 商品详情数据 商品销售额销量API
场景:一个宽敞明亮的办公室,一位公司高管坐在办公桌前。 高管(自言自语):淘宝,这个平台上商品真是琳琅满目,应该有不少销售数据吧。我该怎么利用这些数据呢? 突然,房间…...
Markdown初级使用指南
前言 大家好,我是艾老虎尤,我在一篇官方的文章中,我了解到了markdown,原本我写博客一直是使用的富文本编译器,之前我也有同学叫我使用MD,但是我嫌它复杂,就比如说一个标题,我在富文…...
国际版阿里云/腾讯云CDN装备运用教程:加快网站拜访速度
阿里云CDN装备运用教程:加快网站拜访速度 本文旨在为读者供给一个关于阿里云CDN的简要教程。咱们将介绍阿里云CDN的基本概念、资源加快过程、同步资源设置以及与阿里云OSS目标存储的结合。期望经过这篇教程,读者能够更好地了解和利用阿里云CDN服务&…...
面试之快速学习计算机网络-http
1. HTTP常见状态码 2. 3开头重定向,4开头客户端错误,5开头服务端错误 2. HTTP 报文 1. start-line:请求行,可以为以下两者之一: 请求行: GET /hello-world2.html HTTP/1.1状态行:HTTP/1.1 200…...
2023水果编曲软件fl studio 21.1.0 .3713官方中文直装破解版
fl studio 21.1.0 .3713官方中文直装破解版是一个完整的软件音乐制作环境或数字音频工作站(DAW)。它代表了 25 多年的创新发展,将您创作、编曲、录制、编辑、混音和掌握专业品质音乐所需的一切集于一身。 fl studio 21.1.0 .3713官方中文直装…...
【微信小程序】页面路由跳转函数之间的区别
微信小程序开发系列 文章目录 前言一、介绍1.wx.switchTab(Object object)2.wx.reLaunch(Object object)3.wx.redirectTo(Object object)4.wx.navigateTo(Object object)5.wx.navigateBack(Object object) 前言 在开发微信小程序中基本都会用到页面跳转,微信小程序…...
Ubuntu inotify
inotify 是一个用于监视文件系统事件的机制。它允许你监视文件或目录的变化,如文件的创建、修改、删除、移动等,以及目录的访问权限变化。 安装 在 Ubuntu 中,你需要安装 inotify-tools 包,这是一个包含 inotifywait 和 inotifywatch 等实用工具的软件包。你可以使用以下命…...
开始MySQL之路——MySQL的DataGrip图形化界面
下载DataGrip 下载地址:Download DataGrip: Cross-Platform IDE for Databases & SQL 安装DataGrip 准备好一个文件夹,不要中文和空格 C:\Develop\DataGrip 激活DataGrip 激活码: VPQ9LWBJ0Z-eyJsaWNlbnNlSWQiOiJWUFE5TFdCSjBaIiwibGl…...
C++ STL 标准模板库
C STL 标准模板库 标准容器 顺序容器 vector vector 向量容器 底层数据结构:动态开辟的数组,每次以原来空间大小的2倍进行扩容。采用allocator进行空间开辟和释放,对象创建和析构的分离。具体如C模板学习笔记中简要实现C中的vector。 增…...
C#-集合小例子
目录 背景: 过程: 1.添加1-100数: 2.求和: 3.平均值: 4.代码: 总结: 背景: 往集合里面添加100个数,首先得有ArrayList导入命名空间,这个例子分为3步,1.添加1-100个数2.进行1-100之间的总和3.求总和的平均值&…...
git保存删除的文件
查看pg源码的函数具体内容: https://doxygen.postgresql.org/resowner_8h.html#a7f01c9e9f97849f2859feabd913de1f8 git add 添加了多余文件 git add . 表示当前目录所有文件,不小心就会提交其他文件 git add 如果添加了错误的文件的话 撤销操作 g…...
【golang】go语句执行规则(goroutine)(下)
怎样才能让主goroutine等待其他goroutine? 上篇文章提到,一旦主 goroutine 中的代码执行完毕,当前的 Go 程序就会结束运行,无论其他的 goroutine 是否已经在运行了。那么,怎样才能做到等其他的 goroutine 运行完毕之后…...
websocket 接收消息无法获取用户id
1.遇到问题 公司项目是基于ruoyi 框架快速搭建开发,使用多线程搜索查询,所以以用户区分任务,保证可以搜索任务和取消搜索,所以我这需要获得用户id,使用 SecurityUtils 共工工具类从请求头获取token,然后解…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
STM32---外部32.768K晶振(LSE)无法起振问题
晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...
Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?
Pod IP 的本质与特性 Pod IP 的定位 纯端点地址:Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址(如 10.244.1.2)无特殊名称:在 Kubernetes 中,它通常被称为 “Pod IP” 或 “容器 IP”生命周期:与 Pod …...
WEB3全栈开发——面试专业技能点P4数据库
一、mysql2 原生驱动及其连接机制 概念介绍 mysql2 是 Node.js 环境中广泛使用的 MySQL 客户端库,基于 mysql 库改进而来,具有更好的性能、Promise 支持、流式查询、二进制数据处理能力等。 主要特点: 支持 Promise / async-await…...
【大模型】RankRAG:基于大模型的上下文排序与检索增强生成的统一框架
文章目录 A 论文出处B 背景B.1 背景介绍B.2 问题提出B.3 创新点 C 模型结构C.1 指令微调阶段C.2 排名与生成的总和指令微调阶段C.3 RankRAG推理:检索-重排-生成 D 实验设计E 个人总结 A 论文出处 论文题目:RankRAG:Unifying Context Ranking…...
Git 命令全流程总结
以下是从初始化到版本控制、查看记录、撤回操作的 Git 命令全流程总结,按操作场景分类整理: 一、初始化与基础操作 操作命令初始化仓库git init添加所有文件到暂存区git add .提交到本地仓库git commit -m "提交描述"首次提交需配置身份git c…...
Linux入门(十五)安装java安装tomcat安装dotnet安装mysql
安装java yum install java-17-openjdk-devel查找安装地址 update-alternatives --config java设置环境变量 vi /etc/profile #在文档后面追加 JAVA_HOME"通过查找安装地址命令显示的路径" #注意一定要加$PATH不然路径就只剩下新加的路径了,系统很多命…...
