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

目录

    • 一、概述
      • 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)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CC1310 Debug interface is locked

XDS110连接CC1310板子&#xff0c;打开Smart RF 弹出窗口如下&#xff1a; 解决办法&#xff1a; 1 打开SmartRF Flash Programmer 2 选择连接的设备CC1310, 弹出如下窗口&#xff0c;点击OK。 3 点击Tools图标&#xff0c;选择CC26XX/CC13XX Forced Mass Erase。 4 在弹出的…

分布式锁的三种实现方案

目录 为什么需要分布式锁实现一个分布式锁需要考虑的点如何实现一个分布式锁基于数据库的实现基于 zookeeper 实现基于 redis 实现 实际项目中好用的轮子 为什么需要分布式锁 传统的 jdk 锁&#xff0c;比如 synchronized, reentrantlock 只能在单机环境中使用分布式场景下&am…

5.26 基于UDP的网络聊天室

需求&#xff1a; 如果有人发送消息&#xff0c;其他用户可以收到这个人的群聊信息 如果有人下线&#xff0c;其他用户可以收到这个人的下线信息 服务器可以发送系统信息实现模型 模型&#xff1a; 代码&#xff1a; //chatser.c -- 服务器端实现 #include <stdio.h>…

FastAPI - 组织模块2

FastAPI没有强制指定某种格式来组织项目结构&#xff0c;开发者可以根据自己喜好和项目需要来定制自己的项目结构。 https://fastapi.tiangolo.com/zh/tutorial/bigger-applications/ 在项目根目录创建python包routers&#xff0c;然后创建member.py文件 member.py文件内容 …

互联网应用主流框架整合之AOP

SpringAOP基本概念和约定流程 在实际的开发中有些内容并不是面向对象能够解决的&#xff0c;比如数据库事务&#xff0c;对于企业级应用非常重要&#xff0c;比如在电商系统中订单模块和交易模块&#xff0c;一边是交易记录一边是账户数据&#xff0c;就需要对这两者有统一的事…

权限维持--linux

隐藏文件/夹&-开头文件 如何创建: 在文件名之前加.即可 touch .1.s 如何清除、查找&#xff1a; ls -al rm -fr -文件 已-开头的文件直接读取是不行的需要带目录 隐藏时间戳 ①用其他文件的时间 touch -r zww.php testq.txt 如何清除、查看&#xff1a; stat test…

大模型基础知识

文章目录 1. 位置编码1.1 绝对位置编码1.2 相对位置编码1.3 旋转位置编码2. 注意力机制2.1 MHA(muti head attention)2.2 MQA(muti query attention)2.3 GQA(grouped query attention)3. 大模型分类4. 微调方法4.1 Prompt Tuning4.2 Prefix Tuning4.3 Lora4.4 QLora5. La…

探索机器人智能设备:开启智慧生活新篇章

机器人智能设备作为科技创新的代表&#xff0c;正以其独特的魅力吸引着越来越多的关注。它们不仅具备高度的智能化和自主化能力&#xff0c;还能在各种场景下发挥出强大的功能。 机器人智能设备的张总说&#xff1a;在智能家居领域&#xff0c;机器人智能设备可以帮助我们实现家…

改进rust代码的35种具体方法-类型(十九)-避免使用反射

上一篇文章 从其他语言来到Rust的程序员通常习惯于将反思作为工具箱中的工具。他们可能会浪费很多时间试图在Rust中实现基于反射的设计&#xff0c;却发现他们所尝试的事情只能做得不好&#xff0c;如果有的话。这个项目希望通过描述Rust在反思方面做什么和不做什么&#xff0c…

2024年【西式面点师(中级)】新版试题及西式面点师(中级)考试试卷

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年【西式面点师&#xff08;中级&#xff09;】新版试题及西式面点师&#xff08;中级&#xff09;考试试卷&#xff0c;包含西式面点师&#xff08;中级&#xff09;新版试题答案和解析及西式面点师&#xff08;…

手动安装maven依赖到本地仓库

使用mvn install命令安装jar包到指定的仓库。 命令如下&#xff1a; mvn install:install-file -Dmaven.repo.localC:\Users\liyong.m2\repository -DgroupIdcom.aspose -DartifactIdwords -Dversion18.4 -Dpackagingjar -DfileC:\Users\liyong\Desktop\jar\words-18.4.jar 解释…

JAVA智慧工厂制造生产管理MES系统,全套源码,多端展示(MES与ERP系统的区别和联系)

MES与ERP系统的区别和联系 MES制造执行系统&#xff0c;是一套面向制造公司车间执行层的生产信息化管理系统。MES 可觉得公司提供涉及制造数据管理、计划排产管理、生产调度管理、库存管理、质量管理、人力资源管理、工作中心、设备管理、工具工装管理、采购管理、成本管理、项…

谷歌忙于手动删除自己搜索引擎中奇怪的人工智能答案

该公司确认正在“迅速采取行动”消除人工智能工具的一些奇怪反应。 社交媒体上充斥着谷歌新的人工智能概述产品的例子&#xff0c;这些产品说了一些奇怪的话&#xff0c;从告诉用户在披萨上涂胶水到建议他们吃石头。混乱的推出意味着&#xff0c;随着各种表情包的发布&#xf…

DNS 解析过程

文章目录 简介特点查询方式⚡️1. 浏览器缓存2. 系统缓存&#xff08;hosts文件&#xff09;3. 路由器缓存4. 本地域名服务器5. 根域名服务器6. 顶级域名服务器7. 权限域名服务器8. 本地域名服务器缓存并返回9. 操作系统缓存并返回10. 浏览器缓存并访问流程图 总结 简介 DNS&a…

双向带头链表实现

目录 一. 逻辑结构图解 1. 节点中存储的值 2.逻辑实现 二. 各种功能实现 1. 创建节点函数 2. 初始化哨兵位 3. 尾插 4. 头插 5. 尾删 6. 头删 7. 打印链表值 8. 查找数据&#xff0c;返回节点地址 9. 指定地址后插入节点 10. 删除指定地址节点 11. 销毁链表 三.…

vue实现附件下载 获取到接口的图片,设置宽度100%样式

一、vue实现附件下载&#xff0c;使用a链接 <a class"btn flex_center" target"_blank" :href"localImgSrc(goodsDetail.attachment)" :download"localImgSrc(goodsDetail.attachment)" >立即下载 </a>二、 获取到接口…

七大获取免费https的方式

想要实现https访问最简单有效的的方法就是安装SSL证书。只要证书正常安装上以后&#xff0c;浏览器就不会出现网站不安全提示或者访问被拦截的情况。下面我来教大家怎么去获取免费的SSL证书&#xff0c;又如何安装证书实现https访问。 一、选择免费SSL证书提供商 有多家机构提…

vue3(一):Vue3简介、创建vue3工程、Vue3中的响应式

目录 一.Vue3简介 1.性能提升 2.源码升级 3.拥抱ts 4.新特性 &#xff08;1&#xff09;Composition API&#xff08;组合API&#xff09;&#xff1a; &#xff08;2&#xff09;新的内置组件&#xff1a; &#xff08;3&#xff09;其他改变&#xff1a; 二.创建vue…

【计算机视觉(4)】

基于Python的OpenCV基础入门——色彩空间转换 色彩空间简介HSV色彩空间GRAY色彩空间色彩空间转换 色彩空间转换代码实现: 色彩空间简介 色彩空间是人们为了表示不同频率的光线的色彩而建立的多种色彩模型。常见的色彩空间有RGB、HSV、HIS、YCrCb、YUV、GRAY&#xff0c;其中最…

BLE蓝牙模块在车联网中的智能开锁、数据监控应用

随着科技的不断发展&#xff0c;车联网已经成为了汽车行业的一个热门话题。在这个领域中&#xff0c;BLE蓝牙模块发挥着重要的作用&#xff0c;特别是在智能开锁和数据监控方面的应用。本文将详细介绍BLE蓝牙模块在这两个方面的应用及其优势。   一、智能开锁   1.车辆远程…