【软考】下篇 第13章 层次式架构设计理论与实践

news2024/11/14 3:30:58

目录

    • 一、概述
      • 1.2 通用分层
      • 1.2 分层架构注意点
    • 二、表现层(展示层)
      • 2.1 表现层设计模式(MVC、MVP、MVVM)
      • 2.2 使用XML设计表现层
      • 2.3 UIP
      • 2.4 表现层动态生成设计思想
    • 三、中间层(业务层、业务逻辑层)
      • 3.1 组件设计
      • 3.2 工作流设计
      • 3.3 实体设计
      • 3.4 业务逻辑层框架(MSC)
    • 四、数据访问层(持久层)
      • 4.1 5种数据访问模式
      • 4.2 其他(工厂模式、XML Schema、事务、连接对象管理)
    • 五、数据架构规划与设计
    • 六、物联网层次架构设计
    • 七、案例分析
      • 电子商务网站(网上商店PetShop)
      • 基于物联网架构的电子小票服务系统

一、概述

软件层次式体系结构 是最通用的架构(可作为初始架构),也被叫作N 层架构模式 (n-tier architecture pattern)

层次式体系结构设计是将系统组成一个层次结构,每一层为上层服务,并作为下层客户。
在一些层次系统中,除了一些精心挑选的输出函数外,内部的层接口只对相邻的层可见。
连接件通过决定层间如何交互的协议来定义,拓扑约束包括对相邻层间交互的约束。
由于每一层最多只影响两层,同时只要给相邻层提供相同的接口,允许每层用不同的方法实现,同样为软件重用提供了强大的支持。

1.2 通用分层

分层架构本身没有规定要分成多少层,大部分的应用会分成:

  • 表现层(或称为展示层)
  • 中间层(或称为业务层)
  • 数据访问层(或称为持久层)
  • 数据层

在这里插入图片描述

1.2 分层架构注意点

层次式体系结构是一个可靠的通用的架构,对很多应用来说,如果不确定哪种架构适合,可以用它作为一个初始架构。但是,设计时要注意以下两点
(1)污水池反模式
所谓污水池反模式 (architecture sinkhole anti-pattern), 就是请求流简单地穿过几个层,每层里面基本没有做任何业务逻辑,或者做了很少的业务逻辑。比如一些 Java EE例子,业务逻辑层只是简单的调用了持久层的接口,本身没有什么业务逻辑。每一层或多或少都有可能遇到这样的场景,关键是分析这样的请求的百分比是多少。二八原则可以帮助你决定是否正在遇到污水池反模式。如果请求超过20%,则应该考虑让一些层变成开放的。

(2)需要考虑的是分层架构可能会让你的应用变得庞大
即使你的表现层和中间层可以独立发布,但它的确会带来一些潜在的问题,比如:分布模式复杂、健壮性下降、可靠性和性能的不足,以及代码规模的膨胀等。

二、表现层(展示层)

2.1 表现层设计模式(MVC、MVP、MVVM)

MVC模式(Spring MVC)
在这里插入图片描述

MVP模式(Android)
MVC模式中元素之间“混乱”的交互主要体现在允许View和 Model 直接进行“交流 ” , 这在MVP模式中是不允许的。
在MVP中View并不直接使用 Model, 它们之间的通信是通过 Presenter(MVC 中的 Controller) 来进行的,所有的交互都发生在 Presenter 内部,而在MVC中View会直接从Model中读取数据而不是通过Controller。
在这里插入图片描述

MVVM模式(VUE)
在MVVM模式下View和Model不能直接通信,两者的通信只能通过ViewModel来实现。
ViewModel通常要实现一个观察者,
当数据发生变化,ViewModel能够监听到数据的变化,然后通知对应的视图做自动更新;
而当用户操作视图,ViewModel也能监听到视图的变化,再通知数据做改动,
从而形成数据的双向绑定。
这使得MVVM更适用于数据驱动的场景,尤其是数据操作特别频繁的场景。
在这里插入图片描述

2.2 使用XML设计表现层

在这里插入图片描述
统一使用XML形式将GUI按照数据描述的形式保存下来,代替原先特有的表现形式所需要的GUI描述载体。
然后,对于特定的表现技术,实现不同的解析器解析XML配置文件。
根据XML中的标签,按照特有的表现技术实例化的GUI控件实例对象。
例如,解析器遇到button,JFC解析器会给予JLabel对象,
XSLT解析器会给予<button id=…>这样一个HTML字符串,
再调用特定表现技术的API将实例化出来的组件对象添加到GUI上显示。

2.3 UIP

UIP(User Interface Process Application Block) 是微软社区开发的众多Application Block中的其中之一,它是开源的。
UIP提供了一个扩展的框架,用于简化用户界面与商业逻辑代码的分离的方法,
可以用它来写复杂的用户界面导航和工作流处理,并且它能够复用在不同的场景、并可以随着应用的增加而进行扩展。

使用UIP框架的应用程序把表现层分为了以下几层。

  • User Interface Components: 这个组件就是原来的表现层,用户看到的和进行交互都是这个组件,它负责获取用户的数据并且返回结果。
  • User Interface Process Components: 这个组件用于协调用户界面的各部分,使其配合后台的活动,例如导航和工作流控制,以及状态和视图的管理。用户看不到这一组件,但是这些组件为User Interface Components提供了重要的支持功能。

在这里插入图片描述

2.4 表现层动态生成设计思想

基于XML界面管理技术,包括 界面配置界面动态生成界面定制 三部分:
在这里插入图片描述

界面配置: 读取XML静态定义生成界面
界面动态生成: 读取XML静态定义、数据库中的数据层信息,运行时动态生成界面
界面定制: 对界面的动态(运行时)修改过程

三、中间层(业务层、业务逻辑层)

3.1 组件设计

业务逻辑组件分为接口实现类两个部分。

参考服务接口的设计、API设计、微服务拆分等

接口用于定义业务逻辑组件,定义业务逻辑组件必须实现的方法是整个系统运行的核心。
通常按模块来设计业务逻辑组件,每个模块设计一个业务逻辑组件,
并且每个业务逻辑组件以多个 DAO(Data Access Object) 组件作为基础,从而实现对外提供系统的业务逻辑服务。
增加业务逻辑组件的接口,是为了提供更好的解耦,控制器无须与具体的业务逻辑组件耦合,而是面向接口编程

3.2 工作流设计

工作流管理联盟(Workflow Management Coalition, WFMC) 将工作流定义为:

业务流程的全部或部分自动化
在此过程中,文档、信息或任务 按照一定的过程规则流转
实现组织成员间的协调工作以达到业务的整体目标。

工作流是一种反映业务流程的计算机化的模型,
是为了在先进计算机环境支持下实现经营过程集成经营过程自动化而建立的可由工作流管理系统执行的业务模型。

它解决的主要问题是:

使在多个参与者 之间按照某种预定义的规则传递文档、信息或任务过程自动进行
从而实现某个预期的业务目标,或者是促使此目标的实现。

在这里插入图片描述
(1) interface 1: 过程定义导入/导出接口。
(2) interface 2: 客户端应用程序接口。
(3) interface 3: 应用程序调用接口。
(4) interface 4: 工作流机协作接口。
(5) interface 5: 管理和监视接口。

用工作流的思想组织业务逻辑,优点是:

  • 应用逻辑过程逻辑 分离,
  • 在不修改具体功能的情况下,通过修改过程模型改变系统功能,完成对生产经营 部分过程全过程集成管理
  • 可有效地把 人、信息 和 应用工具 合理地组织 在一起,发挥系统的最大效能。

3.3 实体设计

业务逻辑层实体提供对业务数据相关功能(在某些设计中)的状态编程访问。

参考面向对象中的对象设计、DDD中的实体设计,即是领域模型,又是数据实体

业务逻辑层实体可以使用具有复杂架构的数据来构建,这种数据通常来自数据库中的多个相关表。
业务逻辑层实体数据可以作为业务过程的部分 I/O 参数传递。
业务逻辑层实体可以是可序列化的,以保持它们的当前状态。

在应用程序中表示业务逻辑层实体的方法有很多(从以数据为中心的模型到更加面向对象的表示法),
如XML、 通用 DataSet、 有类型的 DataSet 等。
在这里插入图片描述

3.4 业务逻辑层框架(MSC)

吸收了SOA思想之后的一个三层体系结构,如下图:
在这里插入图片描述
业务层采用业务容器(Business Container)

参考清晰架构中的按特性分包

业务容器中,业务逻辑按照Domain Model - Service - Control(MSC)思想来实现的。

参考Spring MVC排除View后(前后端分离),具体业务处理的MC引入Service层后变为MSC分层

(1) Domain Model 是领域层业务对象,它仅仅包含业务相关的属性。
(2) Service 是业务过程实现的组成部分,是应用程序的不同功能单元,通过在这些服务之
间定义良好的接口和契约联系起来。
(3) Control 服务控制器,是服务之间的纽带,不同服务之间的切换就是通过它来实现的。

四、数据访问层(持久层)

4.1 5种数据访问模式

(1)在线访问
占用数据库连接直接在线访问(shell、DB管理工具等)

(2)DataAccess Object
DAO模式是标准 J2EE 设计模式之一,
开发人员常常用这种模式将底层数据访问操作高层业务逻辑分离开。

一个典型的DAO实现通常有以下组件。
(1)一个DAO工厂类。
(2)一个DAO接口。
(3)一个实现了DAO接口的具体类。
(4)数据传输对象。
这当中具体的DAO类包含访问特定数据源的数据的逻辑。

(3)Data Transfer Object
Data Transfer Object是经典EJB设计模式之一。
DTO本身是这样一组对象或是数据的容器,它需要跨不同的进程或是网络的边界来传输数据。
这类对象本身应该不包含具体的业务逻辑,并且通常这些对象内部只能进行一些诸如内部一致性检查和基本验证之类的方法,而且这些方法最好不要再调用其他的对象行为。

在具体设计这类对象(DTO)时,通常可以有如下两种选择
(1) 使用编程语言内置的集合对象(列表、Map,弱类型校验)
(2) 通过创建自定义类来实现DTO对象,通过定义显示的get或是set方法来访问数据。

具体实现中有许多方法试图将上述这两种方法的优点结合在一起。
第一种方法是代码生成技术,该技术可以生成脱离现有元数据(如可扩展标记语言XML架构)的自定义DTO类的源代码;
第二种方法是提供更强大的集合,尽管它也是平台内置的一般的集合,但它将关系数据类型信息原始数据存储在一起,例如IBM提出的SDO技术或是微软ADO.NET中的DataSet就支持这类方法。

(4)离线数据模式
离线数据(预定义格式:XML、文件等)内置于应用中,由应用直接进行访问

(5)ORM(Object/Relation Mapping)
大多数应用中的数据都是依据关系模型存储在关系型数据库中;
而很多应用程序中的数据在开发或是运行时则是以对象的形式组织起来的。
那么,对象/关系映射就提供了这样一种工具或是平台,
能够帮助将应用程序中的数据转换成关系型数据库中的记录;
或是将关系数据库中的记录转换成应用程序中代码便于操作的对象。

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC 进行了轻量级的对象封装,
使Java 程序员可以随心所欲地使用对象编程思维来操纵数据库。
在这里插入图片描述

4.2 其他(工厂模式、XML Schema、事务、连接对象管理)

工厂模式

参考JDBC和具体驱动(mysql、oracle、h2、postgresql)

事务处理(ACID)

参考jdbc事务处理(begin / comit / rollback)

原子性表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。
一致性表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态。
隔离性表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见。
持久性表示已提交的数据在事务执行失败时,数据的状态都应该正确。

连接对象管理

参考数据库连接池设计思想

五、数据架构规划与设计

数据库设计与类的设计融合
对类和类之间关系的正确识别是数据模型的关键所在。

数据库设计与XML设计融合
目前,XML正在成为Internet上数据描述和交换的标准,并且将来会代替HTML而成为Web上保存数据的主要格式。

XML文档分为两类
一类是以数据为中心的文档,这种文档在结构上是规则的,在内容上是同构的,具有较少的混合内容和嵌套层次,人们只关心文档中的数据而并不关心数据元素的存放顺序,这种文档简称为数据文档,它常用来存储和传输Web数据。
另一类是以文档为中心的文档,这种文档的结构不规则,内容比较零散,具有较多的混合内容,并且元素之间的顺序是有关的,这种文档常用来在网页上发布描述性信息、产品性能介绍和E-mail信息等。

XML文档的存储方式有两种
(1) 基于文件的存储方式。 基于文件的存储方式是指将XML文档按其原始文本形式存储,主要存储技术包括操作系统文件库通用文档管理系统传统数据库的列(作为二进制大对象BLOB或字符大对象CLOB)。这种存储方式需维护某种类型的附加索引,以建立文件之间的层次结构。

基于文件的存储方式的特点:
无法获取XML文档中的结构化数据;
通过附加索引可以定位具有某些关键字的XML文档,一旦关键字不确定,将很难定位;
查询时,只能以原始文档的形式返回,即不能获取文档内部信息;
文件管理存在容量大、管理难的缺点。

(2) 数据库存储方式。 数据库在数据管理方面具有管理方便、存储占用空间小、检索速度快、修改效率高和安全性好等优点。一种比较自然的想法是采用数据库对XML文档进行存取和操作,这样可以利用相对成熟的数据库技术处理XML文档内部的数据。

数据库存储方式的特点:
能够管理结构化和半结构化数据;
具有管理和控制整个文档集合本身的能力;
可以对文档内部的数据进行操作;
具有数据库技术的特性,如多用户、并发控制和一致性约束等;
管理方便,易于操作。

六、物联网层次架构设计

物联网可以分为三个层次,
底层是用来感知数据的感知层,即利用传感器、二维码、RFID等设备随时随地获取物体的信息。
第二层是数据传输处理的网络层,即通过各种传感网络与互联网的融合,将对象当前的信息实时准确地传递出去。
第三层则是与行业需求结合的应用层,即通过智能计算、云计算等将对象进行智能化控制。

1.感知层
感知层用于识别物体、采集信息。
感知层包括二维码标签和识读器、RFID标签和读写器、摄像头、GPS、传感器、M2M终端、传感器网关等,主要功能是识别对象、采集信息,与人体结构中皮肤和五官的作用类似。
感知层解决的是人类世界和物理世界的数据获取问题。

2.网络层
网络层用于传递信息和处理信息。
网络层包括通信网与互联网的融合网络、网络管理中心、信息中心和智能处理中心等。
网络层将感知层获取的信息进行传递和处理,类似于人体结构中的神经中枢和大脑。
网络层解决的是传输预处理感知层所获得数据的问题。

3.应用层
应用层实现广泛智能化。
应用层是物联网与行业专业技术的深度融合,结合行业需求实现行业智能化,这类似于人们的社会分工。
物联网应用层利用经过分析处理的感知数据,为用户提供丰富的特定服务。
物联网的应用可分为

  • 监控型(物流监控、污染监控)
  • 查询型(智能检索、远程抄表)
  • 控制型(智能交通、智能家居、路灯控制)
  • 扫描型(手机钱包、高速公路不停车收费ETC)等

应用层解决的是信息处理人机交互的问题。
人机界面已远远超出现实中人与计算机交互的概念,而是泛指与应用程序相连的各种设备的交互

七、案例分析

电子商务网站(网上商店PetShop)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

基于物联网架构的电子小票服务系统

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

Java解析并修改JSON:将isShow属性改为false

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 在Java中&#xff0c;可以使用各种库来处理JSON数据。其中&#xff0c;Jackson和Gson是两个非常流行且功能强大的库。在这篇文章中&#xff0c;将使用Jackson库来解析给定的JSON字符串&#xff0c;将其转换为Map对象…

适合下班做的副业兼职、1天挣300,7天涨粉2万

最近小红书上有类视频火了&#xff01; 周周近财&#xff1a;让网络小白少花冤枉钱&#xff0c;赚取第一桶金 利用AI制作的漫画解说历史小说视频。视频以《明朝那些事儿》为蓝本&#xff0c;一上线就疯狂吸粉&#xff0c;多条视频内容都大爆了。 就是这个账号&#xff0c;仅仅…

不怕YOLOv10高歌猛进,我有YOLOv8稳扎稳打

YOLOv10 出来有几天时间了&#xff0c;这次我没有选择第一时间出文章解析&#xff0c;如此频繁的发布数字版本的 YOLO 着实让人头疼&#xff0c;虽然数字的更新并非旧版技术的过时&#xff0c; 但是这肯定会让很多在校同学增加很多焦虑情绪。这里还是请大家辩证看待。 v10 这次…

钉钉企业内部H5微应用或小程序之钉消息推送

钉钉简单的推送钉消息 一、钉钉准备工作 首先进入钉钉开放平台 你得有企业内部微应用或者小程序 没有创建的话去看我另一篇文章有说明 钉钉开放平台创建企业内部H5微应用或者小程序-CSDN博客 看不懂话也可以参考官方文档&#xff1a;创建应用 - 钉钉开放平台 二、开发的准备…

mfc140u.dll丢失的解决方法有哪些?怎么全面修复mfc140u.dll文件

mfc140u.dll丢失其实相对来说不太常见到&#xff0c;因为这个文件一般是不丢失的&#xff0c;不过既然有人遇到这种问题&#xff0c;那么小编一定满足各位&#xff0c;给大家详细的唠叨一下mfc140u.dll丢失的各种解决方法&#xff0c;教大家以最快最有效率的方法去解决mfc140u.…

二零二四充能必读 | 618火热来袭,编程书单助你提升代码力

文章目录 &#x1f4d8; Java领域的经典之作&#x1f40d; Python学习者的宝典&#x1f310; 前端开发者的权威指南&#x1f512; 并发编程的艺术&#x1f916; JVM的深入理解&#x1f3d7; 构建自己的编程语言&#x1f9e0; 编程智慧的结晶&#x1f31f; 代码效率的提升 亲爱的…

开源监控工具monit安装部署

Monit 简介 Monit是一个轻量级(500KB)跨平台的用来监控Unix/linux系统的开源工具。部署简单&#xff0c;并且不依赖任何第三方程序、插件或者库。 Monit可以监控服务器进程、文件、文件系统、网络状态&#xff08;HTTP/SMTP等协议&#xff09;、远程主机、服务器资源变化等等。…

Android 架构 UseCase最佳实践

Android 架构 UseCase最佳实践 前言UseCase 的职责UseCase 的命名UseCase 的线程安全UseCase 的签名依赖UseCase 的引用透明UseCase 的接口抽象 前言 Android 官方的最新架构中引入了 Domain &#xff08;网域层 or 领域层&#xff09;&#xff0c;Domain Layer 由一个个 UseC…

《征服数据结构》双向链表

摘要&#xff1a; 1&#xff0c;双链表的介绍 2&#xff0c;双链表的用途 3&#xff0c;双链表的节点插入和删除 1&#xff0c;双链表的介绍 前面我们讲过单链表&#xff0c;单链表的特点就是只能往后访问不能往前访问。单链表一般在面试中用的比较多&#xff0c;比如删除倒数第…

【数据分析面试】55. 寻找双词组 (Python)

题目&#xff1a; 寻找双词组 &#xff08;Python&#xff09; 编写一个名为 find_bigrams 的函数&#xff0c;该函数接收一个句子或段落的字符串&#xff0c;并按顺序返回其所有双词组的列表。 注意&#xff1a; 双词组是指连续的两个单词。 示例&#xff1a; 输入&#x…

gitLab 使用tortoiseGit 克隆新项目 一直提示tortoiseGitPlink输入密码 输完也不生效

问题描述&#xff1a;准备用TortoiseGit拉取gitlab上一个新项目代码&#xff0c;出现tortoiseGitPlink提示让输入密码&#xff0c;输入后又弹出&#xff0c;反复几次&#xff0c;无法down下来代码。 解决方案&#xff1a; 1.找到PuTTYgen工具&#xff0c;打开 2. 点击load 按钮…

Docker是什么?使用场景作用及Docker的安装和启动详解

目录 Docker是什么&#xff1f; Docker的发展 Docker的安装 Docker使用 Docker的运行机制 第一个Docker容器 进入Docker容器 客户机访问容器 Docker是什么&#xff1f; Docker 是一个开源的应用容器引擎&#xff0c;基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker …

网络安全防御之下一代防火墙部署思路分享

随着企业在数字化转型过程中不断深化&#xff0c;为了促进业务快速且安全地推出和更新&#xff0c;企业所采用的应用架构和部署方式经历了显著的演进&#xff1a;它们从单一应用转变为分层架构&#xff0c;进而发展为微服务架构&#xff1b;同时部署方式也由传统的本地部署进化…

区间选点问题-贪心-C++

问题&#xff1a; 给定 &#x1d441; 个闭区间 [ai,bi]&#xff0c;请你在数轴上选择尽量少的点&#xff0c;使得每个区间内至少包含一个选出的点。 输出选择的点的最小数量。 位于区间端点上的点也算作区间内。 输入格式 第一行包含整数 &#x1d441;&#xff0c;表示区间数…

这样问问题, 客户才会下单!

和供应商沟通时&#xff0c;提问方式至关重要。如何提问是外贸交流的关键&#xff0c;而针对客户的合适提问更是促成交易的秘诀。前不久&#xff0c; 我有一个客户想要一个不属于我们行业的新品&#xff0c; 于是我准备去阿里巴巴找找供应商。但因为我对该领域并不了解&#xf…

MYSQL 使用子查询id数据做条件更新

举例&#xff0c;我想查出某个表里面符合条件的前5条数据的id 做数据更新 &#xff1a; 想法 报错 更正写法 &#xff1a; 示例&#xff1a; UPDATE t_authorisation_record ar1JOIN (SELECT IDFROM t_authorisation_recordWHERE device_company_name JCcccORDER BY id ASCLI…

Python代码:二十一、增加派对名单(二)

1、题目 描述 为庆祝驼瑞驰在牛爱网找到合适的对象&#xff0c;驼瑞驰通过输入的多个连续字符串创建了一个列表作为派对邀请名单&#xff0c;在检查的时候发现少了他最好的朋友“Allen”的名字&#xff0c;因为是最好的朋友&#xff0c;他想让这个名字出现在邀请列表的最前面…

边缘计算网关的用途及其使用方法-天拓四方

在数字化日益深入的今天&#xff0c;边缘计算网关作为一种重要的设备&#xff0c;正在越来越多地被应用于各种场景中。它不仅能够提升数据处理的速度和效率&#xff0c;还能在降低网络延迟的同时确保数据的安全性。本文将详细介绍边缘计算网关的用途及其使用方法&#xff0c;帮…

linux安装mysql后,配置mysql,并连接navicate软件

Xshell连接登陆服务器 输入全局命令 mysql -u root -p 回车后&#xff0c;输入密码&#xff0c;不显示输入的密码 注意mysql服务状态&#xff0c;是否运行等 修改配置文件my.cnf&#xff0c;这里没找到就找my.ini&#xff0c;指定有一个是对的 find / -name my.cnf 接下…

04_前端三大件JS

文章目录 JavaScript1.JS的组成部分2.JS引入2.1 直接在head中通过一对script标签定义脚本代码2.2创建JS函数池文件&#xff0c;所有html文件共享调用 3.JS的数据类型和运算符4.分支结构5.循环结构6.JS函数的声明7.JS中自定义对象8.JS_JSON在客户端使用8.1JSON串格式8.2JSON在前…