层次式架构设计

news2024/11/20 11:41:29

本博客地址:https://security.blog.csdn.net/article/details/136660435

一. 概述

1、软件体系结构为软件系统提供了结构行为属性的高级抽象,由构成系统的元素描述这些元素的相互作用指导元素集成的模式以及这些模式的约束组成。层次式体系结构设计是一种常见的架构设计方法,它将系统组成为一个层次结构,每一层为上层服务,并作为下层客户。层次式体系结构的每一层最多只影响两层。

2、大部分的应用会分成表现层(或称为展示层)、中间层(或称为业务层)、访问层(或称为持久层)和数据层

3、采用分层架构设计的一个特点就是关注点分离。每层中的组件只负责本层的逻辑。

4、设计层次式体系结构要注意以下两点:
● 容易成为污水池反模式:请求流简单地穿过几个层,每层里面基本没有做任何业务逻辑,或者做了很少的业务逻辑。
● 分层架构可能会让应用变得庞大

二. 表现层框架设计

1、MVC 是一种软件设计模式。MVC 把一个应用的输入处理输出流程按照视图控制模型的方式进行分离,形成了控制器模型视图 3 个核心模块。其中:
控制器(Controller):接受用户的输入,并调用模型和视图去完成用户的需求。
模型(Model):应用程序的主体部分,表示业务数据和业务逻辑。
视图(View):用户看到并与之交流的界面。

2、使用 MVC 模式来设计表现层,可以有以下的优点:
● 允许多种用户界面的扩展。
● 易于维护。
● 易于构建功能强大的用户界面。
● 增加应用的可拓展性、强壮性、灵活性。

3、三者协作关系如图:
在这里插入图片描述

4、MVP(Model-View-Presenter)模式中 Model 提供数据View 负责显示Presenter 负责逻辑的处理。MVP不仅仅避免了 View 和 Model 之间的耦合,还进一步降低了 Presenter 对 View 的依赖。

5、使用 MVP 模式来设计表现层,可以有以下的优点:
● 模型与视图完全分离,可以修改视图而不影响模型。
● 所有的交互都发生在Presenter内部,因此可以更高效地使用模型。
● 可以将一个 Presenter 用于多个视图,而不需要改变 Presenter 的逻辑。因为视图的变化总是比模型的变化频繁。
● 如果把逻辑放在 Presenter 中,就可以脱离用户接口来测试这些逻辑(单元测试)。

6、MVVM(Model-View-View Model)模式和 MVC、MVP 类似,主要目的都是为了实现视图模型的分离。不同的是 MVVM 中,View 和 Model 不能直接通信,两者的通信只能通过 ViewModel 来实现。

7、ViewModel 是 MVVM 的核心,通过 DataBinding 实现 View 与 Model 之间的双向绑定,其内容包括数据状态处理数据绑定数据转换

8、MVVM流程设计模式如下:
在这里插入图片描述

三. 中间层框架设计

1、业务逻辑层组件分为接口实现类两个部分。接口用于定义业务逻辑组件,定义业务逻辑组件必须实现的方法是整个系统运行的核心。通常按模块来设计业务逻辑组件,每个模块设计一个业务逻辑组件,并且每个业务逻辑组件以多个数据访问对象(DAO)组件作为基础,从而实现对外提供系统的业务逻辑服务。

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

3、工作流参考模型包括的组件是:过程定义工具工作流引擎工作流客户端应用相关应用管理与监视工具

4、逻辑层实体提供对业务数据及相关功能(在某些设计中)的状态编程访问。业务逻辑层实体可以使用具有复杂架构的数据来构建,这种数据通常来自数据库中的多个相关表。业务逻辑层实体数据可以作为业务过程的部分 I/O 参数传递。业务逻辑层实体是可序列化的,以保持它们的当前状态。

5、业务逻辑框架位于系统架构的中间层,是实现系统功能的核心组件。采用容器的形式,便于系统功能的开发、代码重用和管理。

6、在业务容器中,业务逻辑是按照 Domain Model-Service-Control思想来实现的。其中:
Domain Model 是仅仅包含业务相关的属性的领域层业务对象。
Service 是业务过程实现的组成部分,是应用程序的不同功能单元,通过在这些服务之间定义良好的接口和契约联系起来。
Control 服务控制器,是服务之间的纽带,不同服务之间的切换就是通过它来实现的。

四. 数据访问层设计

1、数据访问模式有 5 种,分别是:在线访问Data Access ObjectData Transfer Object离线数据模式对象/关系映射
在线访问:最常用的方式。访问占用一个数据库连接,读取数据,每个数据库操作都会通过这个连接不断地与后台的数据源进行交互。
Data Access Object:一个典型的 DAO 实现通常会有一个 DAO 工厂类、一个 DAO 接口、一个实现了DAO 接口的具体类、数据传输对象。
Data Transfer Object:DTO 是一组对象或容器,需要跨越不同的进程或是网络的边界来传输数据。
离线数据模式:离线数据模式是以数据为中心,数据从数据源获取之后,将按照某种预定义的结构存放在系统中,成为应用的中心。
对象/关系映射:这种方式利用工具或平台能够帮助将应用程序中的数据转换成关系型数据库中的记录;或是将关系数据库中的记录转换成应用程序中代码便于操作的对象。

2、工厂模式定义一个用于创建对象的接口,让子类决定实例化哪一个类。

3、ORM 在关系型数据库和对象之间作一个映射,这样,在具体操纵数据库时,就不需要再去和复杂的 SQL 语句打交道,只要像平时操作对象一样操作即可。

4、XML Schema 用来描述 XML 文档合法结构、内容和限制,提供丰富的数据类型。

5、事务必须服从 ISO/IEC 所制定的 ACID 原则。ACID 是原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持久性(Durability)的缩写。
原子性表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。
一致性表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态。
隔离性表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见。
持久性表示已提交的数据在事务执行失败时,数据的状态都应该正确。

6、建立一个数据库连接池,提供一套高效的连接分配、使用策略,保证了数据库连接的有效复用。

五. 数据架构

1、数据库设计与类的设计融合。对类和类之间关系的正确识别是数据模型的关键所在。好模型的目标是将工程项目整个生存期内的花费减至最小,同时也会考虑到随时间的推移系统将可能发生的变化,因而设计时也要考虑能适应这些变化。

2、数据库设计与 XML 设计融合。XML 文档的存储方式有两种:基于文件的存储方式数据库存储方式

六. 物联网层次架构

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

2、网络层:用于传递信息和处理信息。网络层包括:通信网与互联网的融合网络、网络管理中心、信息中心和智能处理中心等。网络层将感知层获取的信息进行传递和处理,类似于人体结构中的神经中枢和大脑。

3、应用层:实现广泛智能化。应用层是物联网与行业专业技术的深度融合,结合行业需求实现行业智能化,这类似于人们的社会分工。

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

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

相关文章

王庆:当下股市过于悲观,A股、港股基本完成补跌和普跌过程,逆向布局时机已到

核心观点: 1、房地产对中国经济增长拖累最严重的时期正在过去...密切关注真正拐点的出现。 2、当前资本市场从价格表现上来讲,表现的远远超过了基本面所决定的悲观程度。 由于当前资本市场过于悲观,那么反过来就是孕育着机会。 3、我们判…

leetcode刷题(javaScript)——分治思想(二分查找、快速排序)相关场景题总结

分治思想是一种将问题分解成更小的子问题,然后解决子问题并将结果合并的算法设计策略。二分查找、快速排序和折半查找都属于分治思想的经典算法。在leetcode里,分治思想一般结合其他场景出现,构成复合型题目。但是在看题时一定要了解能否用分…

Docker入门二(应用部署、迁移与备份)

文章目录 一、应用部署1.MySQL部署2.Redis部署3.Nginx部署 二、迁移与备份1.容器做成镜像2.把镜像被分成压缩包 一、应用部署 1.MySQL部署 在dokcer中部署mysql,以后不需要在宿主机上装mysql1.做端口映射docker run -id --namemysql5.7 -p 3306:3306 -e MYSQL_ROOT…

九数分三组

枚举三位数时,不用写三个循环,写出最小和最大数循环就行。在这题里要求三个数中不能有重复的数字,先转换为字符串,再转换为字符数组进行排序,最后比较字符串就可以得出结果。这题把结果和原因调换了一下

每日OJ题_牛客HJ37 统计每个月兔子的总数(IO型OJ)

目录 牛客HJ37 统计每个月兔子的总数 解析代码 牛客HJ37 统计每个月兔子的总数 统计每个月兔子的总数_牛客题霸_牛客网 解析代码 #include <iostream> #include <vector>using namespace std; int main() {int n 0;cin >> n;vector<int> arr(n 1…

牛客Highway

题目大意 在ICPCCamp中&#xff0c;有n个方便编号的城镇&#xff0c;编号为1,2,...,n&#xff0c;它们之间通过&#xff08;n-1&#xff09;条道路相连。连接第i个城镇a_i和b_i的道路的长度为c_i。保证任意两座城市之间只能通过道路到达。 Bobo希望修建&#xff08;n-1&#…

PostGIS 中的 K-Means 聚类操作及应用

K-Means算法&#xff1a; K-means 是数据科学和商业的基本算法。让我们深入了解一下。 1. K-means是一种流行的用于聚类的无监督机器学习算法。它是用于客户细分、库存分类、市场细分甚至异常检测的核心算法。 2. 无监督&#xff1a;K-means 是一种无监督算法&#xff0c;用于…

记录一下C++的学习之旅吧--C++基础

文章目录 前言using namespace std; 使用标准命名空间一、helloworld-输出表示1.1代码1.2 运行结果 二、变量2.1.1 普通变量代码2.1.2 运行结果2.2.1 常量和变量代码2.2.2 运行结果 三、sizeof---统计数据类型所占的内存大小3.1 代码3.2 运行结果 四、小数表示4.2 运行结果 五、…

C语言分析基础排序算法——计数排序

目录 计数排序 计数排序基本思路 计数排序改进思路 计数排序 计数排序又称为鸽巢原理&#xff0c;是对哈希直接定址法的变形应用。具体思路为&#xff1a; 统计相同元素出现次数根据统计的结果将序列回收到原来的序列中 计数排序基本思路 基本思路分析&#xff1a; //以…

2024春秋蓝桥杯reverse——crackme01

尝试了下输入没有任何反应 查看——32位——IDA打开 我之前没怎么写过win32&#xff0c;所以我开始在string里面找flag,wrong,right什么的字符&#xff0c;都不行 然后我又在函数里面找main&#xff0c;也什么收获的没有,OK废话完了 在win32里面 关于弹窗的函数&#xff1a;…

EPSON X2A0003510033 XV7081BB介绍

X2A0003510033 XV7081BB是一款具有SPI接口&#xff0c;这款传感器主要用于商业类应用&#xff0c;具体可以应用于抗震和姿态控制领域&#xff0c;以及人机接口的运动检测中&#xff0c;这表明它在工业应用、机器人技术、自动驾驶车辆以及任何需要精确角度测量和姿态控制的场合都…

Codeforces Round 933 (Div. 3) A~D

比赛链接 : codeforces.com/contest/1941 A . Rudolf and the Ticket 直接暴力即可 ; #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define endl \n #define lowbit(x) (x&(-x)) #define sz(a) (int)a.size() #define p…

手搭手RocketMQ发送消息

消息中间件的对比 消息中间件 ActiveMQ RabbitMQ RocketMQ kafka 开发语言 java erlang java scala 单击吞吐量 万级 万级 10万级 10万级 时效性 ms us ms ms 可用性 高(主从架构) 高(主从架构) 非常高(主从架构) 非常高(主从架构) 消息中间件: acti…

mybatisplus使用基本步骤

1.设计实体类&#xff0c;给实体类加一些需要的注解 2.创建Service接口继承mybatisplus提供的 IService<实体类>接口 3.实现Service接口&#xff0c;并继承mybatisplus提供的 ServiceImpl<mapper接口&#xff0c;实体类>类 4.mapper接口继承mybatisplus提供的 B…

java020 - Java集合进阶

1、集合知识回顾 1.1 集合特点 提供了一种储存空间可变的储存模型&#xff0c;储存的数据容量随时可以发生改变。 1.2 集合类体系结构 单列集合和双列集合&#xff1a; 单列集合中&#xff1a;list和set区别&#xff08;数据是否重复&#xff09; 区分接口和实现类&#…

【零基础学习04】嵌入式linux驱动中信号量功能基本实现

大家好,为了进一步提升大家对实验的认识程度,每个控制实验将加入详细控制思路与流程,欢迎交流学习。 今天给大家分享一下,linux系统里面信号量操作的具体实现,操作硬件为I.MX6ULL开发板。 第一:信号量基本简介 信号量是同步的一种方式,linux内核也提供了信号量…

【数据结构】二叉树OJ题目

965. 单值二叉树 如果二叉树每个节点都具有相同的值&#xff0c;那么该二叉树就是单值二叉树。 只有给定的树是单值二叉树时&#xff0c;才返回 true&#xff1b;否则返回 false。 示例 1&#xff1a; 输入&#xff1a;[1,1,1,1,1,null,1] 输出&#xff1a;true示例 2&#x…

链路聚合实验(思科)

华为设备参考&#xff1a; 一&#xff0c;技术简介 网络设备的链路聚合技术&#xff08;Link Aggregation&#xff09;是一种将多个物理链路捆绑在一起&#xff0c;形成一个逻辑链路的技术。这样做可以增加带宽、提高可靠性和实现负载均衡。 二&#xff0c;实验目的 橙色的阻…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的条形码二维码检测系统(深度学习+UI界面+训练数据集+Python代码)

摘要&#xff1a;在物流和制造业中&#xff0c;开发一套高效的条形码与二维码识别系统显得尤为关键。本博文深入探讨了如何利用深度学习技术打造出一套先进的条形码及二维码检测系统&#xff0c;并且提供了一套完整的实施方案。该系统搭载了性能卓越的YOLOv8算法&#xff0c;并…

基于Ambari搭建大数据分析平台

一、部署工具简介 1. Hadoop生态系统 Hadoop big data ecosystem in Apache stack 2. Hadoop的发行版本 Hadoop的发行版除了Apache的开源版本之外&#xff0c;国外比较流行的还有&#xff1a;Cloudera发行版(CDH)、Hortonworks发行版&#xff08;HDP&#xff09;、MapR等&am…