系统架构师考试学习笔记第四篇——架构设计实践知识(16)层次式架构设计理论与实践
本章考点:
大纲,本课时知识点会涉及单选为题型(约占2~5分)和案例题(25分),本课时内容偏重于方法的掌握和应用,根据以往全国计算机技术与软件专业技术资格(水平)考试的出题规律,概念知识的考查内容多数来源于实际应用,还需要灵活运用相关知识点。本课时知识架构如图16.1所示。

一、层次式体系结构概述
1.定义
软件体系结构为软件系统提供了结构、行为和属性的高级抽象,由构成系统的元素描述这些元素的相互作用、指导元素集成的模式以及这些模式的约束组成。层次式体系结构设计是一种常见的架构设计方法,它将系统组成为一个层次结构,每一层为上层服务,并作为下层客户。在一些层次系统中,除了一些精心挑选的输出函数外,内部的层接口只对相邻的层可见。层次式体系结构的每一层最多只影响两层,同时只要给相邻层提供相同的接日,也允许每层用不同的方法实现,这种方式也为软件重用提供了强大的支持。
2.层次式应用的组成
大部分的应用会分成表现层:(或称为展示层),中间层(或称为业务层)、访问层(或称为持久层)和数据层,如图16.2所示。

3.特点与注意事项
采用分层架构设计的一个特点就是关注点分离。每层中的组件只负责本层的逻辑,组件的划分也很容易明确组件的角色和职责,比较容易开发、测试、管理和维护。层次式体系结构是一个可靠的通用的架构,但是设计时要注意以下两点:
1)容易成为污水池反模式(Architecture Sinkhole Anti-patter):请求流简单地穿过几个层,每层里面基本没有做任何业务逻辑,或者做了很少的业务逻辑。比如一些Java EE 例子,业务逻辑层只是简单地调用了持久层的接口,本身没有什么业务逻辑。
2)分层架构可能会让应用变得庞大。
二、表现层框架设计
1. MVC (Model-View-Controller)模式
MVC是一种软件设计模式。MVC 把一个应用的输入、处理、输出流程按照视图、控制、模型的方式进行分离,形成了控制器、模型、视图3个核心模块。其中:
(1)控制器(Controller):接受用户的输入,并调用模型和视图去完成用户的需求。
(2)模型(Model):应用程序的主体部分,表示业务数据和业务逻辑。
(3)视图(View):用户看到并与之交流的界面。
三者协作关系如图16.3所示。

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

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

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

3.业务逻辑层实体设计
逻辑层实体提供对业务数据及相关功能(在某些设计中)的状态编程访问。业务逻辑层实体可以使用具有复杂架构的数据来构建,这种数据通常来自数据库中的多个相关表。业务逻辑层实体数据可以作为业务过程的部分I/O参数传递。业务逻辑层实体是可序列化的,以保持它们的当前状态。
4.业务逻辑层框架
业务逻辑框架位于系统架构的中间层,是实现系统功能的核心组件。采用容器的形式,便于系统功能的开发、代码重用和管理。在业务容器中,业务逻辑是按照 Domain Model-Service-Control思想来实现的。其中:
1)Domain Model 是仅仅包含业务相关的属性的领域层业务对象。
2)Service是业务过程实现的组成部分,是应用程序的不同功能单元,通过在这些服务之间定义良好的接口和契约联系起来。
3)Control服务控制器,是服务之间的纽带,不同服务之间的切换就是通过它来实现的。
四、数据访问层设计
1.数据访问模式
数据访问模式有5种,分别是:在线访问、Data Access Object、Data Transfer Object、离线数据模式、对象/关系映射(Object/Relation Mapping)。
(1)在线访问:最常用的方式。访问占用一个数据库连接,读取数据,每个数据库操作都会通过这个连接不断地与后台的数据源进行交互。
(2) Data Access Object:DAO是标准J2EE 设计模式,这种方式将底层数据访问操作与高层业务逻辑分离开。一个典型的DAO实现通常会有一个DAO工厂类、一个DAO接口、一个实现了DAO 接口的具体类、数据传输对象。
(3) Data Transfer Object:DTO属于EJB设计模式之一。DTO是一组对象或容器,需要跨越不同的进程或是网络的边界来传输数据。
(4)离线数据模式:离线数据模式是以数据为中心,数据从数据源获取之后,将按照某种预定义的结构存放在系统中,成为应用的中心。这种方式对数据的各种操作独立于各种与后台数据源之间的连接或是事务。
(5)对象/关系映射:这种方式利用工具或平台能够帮助将应用程序中的数据转换成关系型数据库中的记录;或是将关系数据库中的记录转换成应用程序中代码便于操作的对象。
2.工厂模式在数据访问层的应用
工厂模式定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。这里可能会处理对多种数据库的操作,因此,需要首先定义一个操纵数据库的接口,然后根据数据库的不同,由类工厂决定实例化哪个类。
3. ORM,Hibernate与CMP2.0设计思想
ORM (Object-Relation Mapping)在关系型数据库和对象之间作一个映射,这样,在具体操纵数据库时,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作即可。Hibernate是一个功能强大,可以有效地进行数据库数据到业务对象的O/R 映射方案。Hibernate 推动了基于普通Java 对象模型,用于映射底层数据结构的持久对象的开发。
4. XML Schema
XML Schema用来描述XML文档合法结构、内容和限制,提供丰富的数据类型。
5.事务处理设计
事务必须服从 ISO/IEC 所制定的 ACID 原则。ACID是原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)的缩写。事务的原子性表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。一致性表示当事务执行失败时,所有被该事务
影响的数据都应该恢复到事务执行前的状态。隔离性表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见。持久性表示已提交的数据在事务执行失败时,数据的状态都应该正确。
6.连接对象管理设计
建立一个数据库连接池,提供一套高效的连接分配、使用策略,保证了数据库连接的有效复用。
五、数据架构规划与设计
(1)数据库设计与类的设计融合。对类和类之间关系的正确识别是数据模型的关键所在。好模型的目标是将工程项目整个生存期内的花费减至最小,同时也会考虑到随时间的推移系统将可能发生的变化,因而设计时也要考虑能适应这些变化。
(2)数据库设计与XML设计融合。XML 文档的存储方式有两种:基于文件的存储方式和数据库存储方式。
六、物联网层次架构设计
(1)感知层:用于识别物体、采集信息。感知层包括二维码标签和识读器、RFID 标签和读写器、摄像头、GPS、传感器、M2M 终端、传感器网关等,主要功能是识别对象、采集信息,与人体结构中皮肤和五官的作用类似。
(2)网络层:用于传递信息和处理信息。网络层包括通信网与互联网的融合网络、网络管理中心、信息中心和智能处理中心等。网络层将感知层获取的信息进行传递和处理,类似于人体结构中的神经中枢和大脑。
(3)应用层:实现广泛智能化。应用层是物联网与行业专业技术的深度融合,结合行业需求实现行业智能化,这类似于人们的社会分工。
七、课后练习
1.软件体系结构为软件系统提供了( )的高级抽象,由构成系统的元素描述这些元素的相互作用、指导元素集成的模式以及这些模式的约束组成。
A.继承、多态、实现
B.关联、扩展、泛化
C.结构、行为、属性
D.构件定义、访问方式、组织部署
2.MVC模式是一种目前广泛流行的软件设计模式。近年来,随着Java EE的成熟,MVC成为了Java EE平台上推荐的一种设计模式。MVC强制性地把一个应用的()流程进行分离,形成了控制器、模型、视图三个核心模块。
A.启动、运行、结束
B.输入、处理、输出
C.前端/客户端、服务端、数据库
D.接受请求、处理请求、返回请求
3.工作流管理联盟(Workflow Management Coalition)将工作流定义为:业务流程的全部或部分自动化,在此过程中,文档、信息或任务按照一定的过程规则流转,实现组织成员间的协调工作以达到业务的整体目标。工作流参考模型包括的组件是()。
A.过程定义工具、工作流引擎、工作流客户端应用、相关应用、管理与监视工具
B.工作流定义工具、工作流引擎、工作流客户端应用、相关应用、管理与监视工具
C.工作流定义工具、工作流引擎、工作流客户端应用、工作流API、管理与监视工具
D.过程定义工具、工作流引擎、工作流客户端应用、工作流API、管理与监视工具
4.事务必须服从ISO/IEC 所制定的ACID原则。关于ACID,以下说法错误的是()。
A.事务的原子性表示事务执行过程中的任何失败都将导致事务所做的任何修改失效
B.一致性表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态
C.隔离性表示在事务执行过程中对数据的修改,在事务提交之后对其他事务不可见
D.持久性表示已提交的数据在事务执行失败时,数据的状态都应该正确
5.物联网的感知层用于识别物体、采集信息。下列()不属于感知层设备。
A.摄像头
B.GPS
C.扫描仪
D.指纹
答案解析:
1、解析:软件体系结构为软件系统提供了结构、行为和属性的高级抽象,由构成系统的元素描述这些元素的相互作用、指导元素集成的模式以及这些模式的约束组成。
答案:C
2、解析:MVC模式是一种目前广泛流行的软件设计模式。近年来,随着 Java EE 的成熟,MVC成为了Java EE平台上推荐的一种设计模式。MVC强制性地把一个应用的输入、处理、输出流程进行分离,形成了控制器、模型、视图三个核心模块。
答案:B
3、解析:工作流参考模型包括的组件是过程定义工具、工作流引擎、工作流客户端应用、相关应用、管理与监视工具。
答案:A
4、解析:隔离性表示在事务执行过程中对数据的修改,在事务提交之“前”对其他事务不可见。
答案:C
5、解析:感知层主要功能是识别对象、采集信息,与人体结构中皮肤和五官的作用类似。但指纹是人的特征属性,不是感知层设备。
答案:D
相关文章:
系统架构师考试学习笔记第四篇——架构设计实践知识(16)层次式架构设计理论与实践
本章考点: 大纲,本课时知识点会涉及单选为题型(约占2~5分)和案例题(25分),本课时内容偏重于方法的掌握和应用,根据以往全国计算机技术与软件专业技术资格(水平)考试的出题规律,概念知识的考查内容多数来源于实际应用,还需要灵活运用相关知识点。本课时知识架构如图1…...
顶踩Emlog插件源码
源码介绍 顶踩Emlog插件源码 前些天看到小刀娱乐网的文章页面有了一些变化,那就是增加了一个有价值/无价值的顶踩按钮。 样式也是非常的好看 再加上两个表情包是非常的有趣。 写到了Emlog系统,效果如上图。 如何使用: 需要在echo_log.…...
国庆出游季,南卡Runner Pro5骨传导耳机让旅途更完美!
国庆长假将至,无论是计划一场远行还是近郊的户外活动,一款适合的耳机都能让旅途更加愉快。南卡Runner Pro5骨传导耳机以其独特的设计和功能,成为了国庆出行的理想伴侣。 首先,骨传导耳机通过颅骨传递声音,避免了传统耳…...
HarmonyOS NEXT 封装实现好用的网络模块(基于最新5.0的API12)
在 HarmonyOS-NEXT 开发中,网络请求是应用开发中不可或缺的一部分。为了提高开发效率和代码复用性,我们可以封装一个好用的网络模块组件。本文将介绍如何在 HarmonyOS-NEXT 中封装一个功能强大且易于使用的网络模块组件。 封装目的 网络模块使用的频率最…...
Visual Studio提示:无法安装CPpython.Exe.x64
如果你需要在Visual Studio中使用python环境,而且你本身已经有一个python环境,则只需要将你自己的python环境配置到Visual Studio中即可,可以无视如题报错,将不会产生实质性的问题或影响。 解决办法: 工具->获取工…...
计算机网络 ---- 电路交换、报文交换、分组交换
目录 零、前言 一、计算机网络发展初期面临的问题 1.1 电路交换的主要特点【电话网络采用电路交换技术】 1.1.1 电路交换的基本知识介绍 1.1.2 电路交换的优缺点 1.3 报文交换技术的特点【电报网络采用报文交换技术】 1.3.1 报文交换的基本知识介绍 1.3.2 报文交换技术…...
OceanBase 基于企业版本OAT安装与OMS安装与InfluxDB的集成
一、前言与环境准备 说明:OceanBase V3 的OMS手动安装与V4的OMS手动安装是存在区别的,建议V4版本的OMS通过OAT进行安装。 前言: OAT 是 OceanBase V4是企业版本安装Web界面的简易安装工具。 InfluxDB 是OMS 的监控时序数据库。 OMS 是Ocea…...
【油猴脚本】tampermonkey 的使用方法,油猴脚本(tampermonkey )编写方法,油猴脚本(tampermonkey )获取脚本的方法
前言:哈喽,大家好,今天给大家分享【油猴脚本】tampermonkey 的使用方法,油猴脚本(tampermonkey )编写方法,油猴脚本(tampermonkey )获取脚本的方法!并提供具体…...
Keil MDK报错:Browse information of one or more files is not available----解决方法:
Keil MDK报错:Browse information of one or more files is not available----解决方法: 问题描述 最近在项目中遇到这样一个问题:拷贝过来添加到工程的.c文件在编译时报如下错误: 解决方案: 总结以下一些解决办法&…...
C# WPF编程-串口通信
C# WPF编程-串口通信 串口通信1. NuGet安装System.IO.Ports2. 界面布局XAML3. C#代码4. 运行效果源码下载 串口通信 1. NuGet安装System.IO.Ports 2. 界面布局XAML <Window x:Class"BlocksTools.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006…...
MybatisPlus中tableName、tableId 和 tableField
在MyBatis-Plus中,tableName、tableId 和 tableField 等注解主要用于自动映射实体类与数据库表之间的关系,以及指定表的主键、字段名等,以减少手动配置的工作量。这些注解是MyBatis-Plus为了简化开发而提供的强大特性之一。下面分别介绍这些注…...
《2024中国数据要素产业图谱2.0版》重磅发布
数据猿出品 本次“数据猿2024年度三大媒体策划活动——《2024中国数据要素产业图谱2.0版》”的发布,下一次版本迭代将于2024年12月底发布2024年3.0版,敬请期待,欢迎报名。 大数据产业创新服务媒体 ——聚焦数据 改变商业 随着技术不断革新&a…...
算法-图论(建图,拓扑排序)
文章目录 建图的三种方式邻接矩阵邻接表链式前向星 拓扑排序拓扑排序基础原理介绍拓扑排序步骤解析拓扑排序模板leetcode-课程表 建图的三种方式 我们建图的三种方式分别是邻接矩阵, 邻接矩阵, 链式前向星 邻接矩阵 假设我们的点的个数为N个, 我们就把他们的下标依次标为1, …...
天童教育:课外阅读图书推荐
新学期开始了,现在正是孩子培养良好的阅读习惯的关键时期。让孩子感受阅读,爱上阅读,无疑会丰富孩子的日常生活,开阔孩子的视野,帮助孩子更好地生活。今天西安天童教育就和大家推荐几本适合孩子看的课外阅读书目&#…...
“汉语新解” Prompt新高度,火爆的李继刚
“汉语新解” prompt 是由李继刚设计的一个用于启发人工智能模型进行创意性文本生成的指令模板。这个 prompt 的设计初衷是为了让AI能够以一种独特的方式解析和重新诠释常见的中文词汇,从而产生出具有深刻洞察力和幽默感的文本内容,仿佛是由鲁迅或林语堂…...
论文:AOP框架安全框架-系统架构师(六十六)
1详细论述安全架构设计中鉴别框架和访问控制框架设计内容,并论述鉴别框架和访问控制所面临的主要威胁,说明其危害。 解析: 鉴别框架有用户密码鉴别、生物特征鉴别和多因素鉴别。 用户密码鉴别可以采用验证登入的用户账号是否正确。 生物特…...
用Unity2D制作一个人物,实现移动、跳起、人物静止和动起来时的动画:下(人物动画)
上个博客我们做出了人物的动画机和人物移动跳跃,接下来我们要做出人物展现出来的动画了 我们接下来就要用到动画机了,双击我们的动画机,进入到这样的页面,我这是已经做好的页面,你们是没有这些箭头的 依次像我一样连接…...
Android 优雅封装Glide
文章目录 Android 优雅封装Glide核心思想定义策略接口定义图片选项实现Glide策略图片管理类使用 Android 优雅封装Glide 核心思想 使用策略模式实现不同图片加载框架的切换,使用建造者设计模式处理不同参数,最后通过 ImageLoader 进行管理。 定义策略…...
智能优化算法-粒子群优化算法(PSO)(附源码)
目录 1.内容介绍 2.部分代码 3.实验结果 4.内容获取 1.内容介绍 粒子群优化算法 (Particle Swarm Optimization, PSO) 是一种基于群体智能的元启发式优化算法,由Kennedy和Eberhart于1995年提出。PSO模拟了鸟群或鱼群的觅食行为,通过粒子之间的相互作用…...
vue系统获取授权平台授权码实现单点登录、注销功能
公司平台需要对接别的平台 实现单点登录 注销。简而言之,不需要在自己公司系统登录 统一在别的平台登录后获取到登录凭证(授权码) 在本公司系统实现免密登录的功能。 流程: 跳转授权页面和保存授权码的代码: hrefLog…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...
