当前位置: 首页 > news >正文

【系统架构师】-第13章-层次式架构设计

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

1、表现层

1、MVC模式

1、控制器:接受用户的输入并调用模型和视图去完成用户的需求

2、模型:应用程序的主体部分。模型表示业务数据业务逻辑

3、视图:用户看到并与之交互的界面。视图向用户显示相关的数据,并能接收用户输入的数据。视图可以向模型查询业务状态,但不能 改变模型

优点:

1、允许多种用户界面的扩展,只需改动视图、控制器。无需调整模型

2、易于维护

3、功能强大的用户界面

2、MVP模式

Controller/ Presenter 负责逻辑的处理, Model提供数据, View负责显示

在MVP 中 View并不直接使用 Model, 它们之间的通信 是通过 Presenter来进行的

 3、MVVM模式

为解决MVP 中U I种类变多,接口也会不断增加的问题而提出的

模型-视图-视图模型。

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

View和 Model 不能直接通信,两者的通信只能通过ViewModel 来实现。 ViewModel通常要实现一个观察者,当数据发生变化, ViewModel 能够监听到数据的变化,然 后通知对应的视图做自动更新;而当用户操作视图, ViewModel 也能监听到视图的变化,再通 知数据做改动,从而形成数据的双向绑定。

更适用于数据驱动的场景

4、使用XML设计

XML (可扩展标记语言)与 HTML 类似,是一种标记语言。适用于Android、WinForm,灵活的页面配置

主要三部分:

1)界面配置:对用户界面的静态定义

2)界面动态生成

3)界面定制:对用户界面的动态修改过程,软件运行过程中,支持用户动态修改后,保存样式、

5、UIP设计思想

应用程序需要维护一个状态,如状态存储在窗体中,代码需要访问这个窗体以重新恢复状态

类似于后台进程,可以重新唤起页面

1)● User Interface Components: 这个组件就是原来的表现层,用户看到的和进行交互都是这 个组件,它负责获取用户的数据并且返回结果。

2)● User Interface Process Components: 这个组件用于协调用户界面的各部分,使其配合后 台的活动,例如导航和工作流控制,以及状态和视图的管理。用户看不到这一组件,但 是这些组件为User Interface Components提供了重要的支持功能。

 2、中间层

1、业务逻辑层组件设计

业务逻辑组件分为接口和实现类两个部分。接口:定义业务逻辑组件,面向接口编程

2、业务逻辑层工作流设计

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

含6个基本模块,分别是工作流执行服务、工作流引擎、流程定义工具、客户端应用、 调用应用和管理监控工具。

1)接口1:过程定义导入/导出接口

2)接口2:客户端应用程序接口

3)接口3:应用程序调用接口

4)接口4:工作流机协作接口。

5)接口5:管理和监视接口

3、业务逻辑层实体设计

以数据为中心的模型到更加面向对象 的表示法。如XML、 通用DataSet、 有类型的 DataSet

通用DataSet对象:

(1)灵活性。 DataSet可以包含数据的集合,能够表示复杂的数据关系。

(2)序列化。在层间传递时, DataSet本身支持序列化。

(3)数据绑定。可以把 DataSet绑定到 ASP.NET应用程序和 Windows 窗体应用程序的任意 用户界面控件。

(4)排序与过滤。可以使用 DataView对象排序和过滤DataSet。 应用程序可以为同一个 DataSet 创建多个DataView对象,以便用不同方式查看数据。

(5)与 XML 的互换性。可以用 XML格式读写 DataSet。

(6)开放式并发。在更新数据时,可以配合使用数据适配器与DataSet 方便地执行开放式 并发检查。

(7)可扩展性。如果修改了数据库架构,则适当情况下数据访问逻辑组件中的方法可以创 建包含修改后的DataTable 和 DataRelation对象的 DataSet。

有类型的DataSet:

包含具有严格类型的方法、 属性和类型定义以公开DataSet中的数据和元数据的类。 

(1)代码易读。要访问有类型的DataSet 中的表和列,可以使用有类型的方法和属性。

(2)有类型的方法和属性的提供使得使用有类型的 DataSet 比使用通用 DataSet更方便。使 用有类型的DataSet时, IntelliSense将可用。

(3)编译时类型检查,无效的表名称和列名称将在编译时而不是在运行时检测。

 4、业务逻辑层框架

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

1)Domain Model 是领域层业务对象,它仅仅包含业务相关的属性

2)Service 是业务过程实现的组成部分,是应用程序的不同功能单元

3)Control 服务控制器,是服务之间的纽带,不同服务之间的切换就是通过它来实现的

3、 数据访问层设计

1)五种数据访问模式

1、在线访问

数据访问模式会占用一个数据库连接,读取数据,每个数据库操作都会通过这个连接不断地与后台的数据源进行交互

2、DataAccess Object

DAO模式:将底层数据访问操作与高层业务逻辑分离开

包含组件:

(1)一个D A O工厂类。

(2)一个D A O接口。

(3)一个实现了D A O接口的具体类。包含访问特定数据源的数据的逻辑

(4)数据传输对象

3、Data Transfer Object

D T O本身是这样一组对象或是数据的容器,它需要跨不同的进程或是网络的边界来传输数据

4、离线数据模式

以数据为中心。离线,对数据的各种操作独立于各种与后台数据源之间的连接或是事务;与 X M L集成,数据可以方便地与X M L格式的文档之间互相转换;独立于数据源

5、对象/关系映射ORM

对象/关系映射,将应用程序中的数据转换成关系型数据库中的记录

2)事务处理设计

事务必须服从 ISO/IEC所制定的ACID原则

原子性(Atomicity)、 一致性(Consistency)、 隔离性 (Isolation) 和持久性 (Durability)

事务的原子性表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。

一致性表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态。

隔离性表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见。

持久性表示已提交的数据在事务执行失败时,数据的状态都应该正确

3)连接对象管理设计

数据库资源池。该模式正是为了解决资源频繁分配、释放所造成的问题

4、数据架构规划与设计

1、数据库设计与类的设计融合

建立数据模型

2、数据库设计与 X M L 设计融合

以数据为中心的文档:以数据库存储

以文档为中心的文档:以文件存储

6、物联网层次架构设计

1、感知层

利用传感器、二维码、 RFID等设备随时随地获取物体的信息

2、网络层

数据传输处理,通过各种传感网络与互联网的融合

3、应用层

实现广泛智能化。解决的是信息处理和人机交互的问题

相关文章:

【系统架构师】-第13章-层次式架构设计

层次式体系结构设计是将系统组成一个层次结构,每一层 为上层服务 ,并作为下层客户。 在一些层次系统中,除了一些精心挑选的输出函数外, 内部的层接口只对相邻的层可见 。 连接件通过决定层间如何交互的协议来定义,拓扑…...

【操作系统】想要更好的学习计算机,操作系统的知识必不可少!!!

操作系统的概念 导言一、日常生活中的操作系统二、计算机系统层次结构三、操作系统的定义3.1 控制和管理计算机资源3.2 组织、调度计算机的工作与资源的分配3.3 给用户和其他软件提供方便接口与环境3.4 总结 四、操作系统的目标和功能4.1 作为管理者4.1.1 处理机管理4.1.2 存储…...

AtCoder Grand Contest 066 B. Decreasing Digit Sums(构造 打表找规律)

题目 给定一个n(n<50)&#xff0c;记f(x)是x各数位的加和&#xff0c;例如f(331)3317 要求输出一个x()&#xff0c;且对于任意i∈[1,n]&#xff0c;均有成立 思路来源 jiangly B站讲解 题解 首先n没啥用&#xff0c;构造一个n50成立的case即可&#xff0c; 给定一个x…...

Hadoop系列总结

一、Hadoop linux基本操作 前提掌握Linux基本操作 参考 Linux基本操作-CSDN博客 1、查看hadoop指定路径下文件大小前6的文件信息 hdfs dfs[hadoop fs] -du -h /path/to/directory|sort -hr|head -n 6...

【第三方登录】Twitter

创建应用 APPID 和 相关回调配置 重新设置api key 和 api secret 设置回调和网址 还有 APP的类型 拿到ClientID 和 Client Secret 源码实现 获取Twitter 的登录地址 public function twitterUrl() {global $db,$request,$comId;require "inc/twitter_client/twitte…...

C++经典面试题目(十七)

1、请解释拷贝构造函数的作用&#xff0c;并说明其调用时机。 拷贝构造函数是一种特殊的构造函数&#xff0c;用于创建一个新对象&#xff0c;其内容与另一个对象相同。它将一个已存在的对象作为参数&#xff0c;并使用该对象的值来初始化新创建的对象。拷贝构造函数的调用时机…...

DFS2 C++

一、指数型枚举 1、题目&#xff1a; 从 1∼n1∼ 这 n 个整数中随机选取任意多个&#xff0c;输出所有可能的选择方案。 输入格式 输入一个整数 n。 输出格式 每行输出一种方案。 同一行内的数必须升序排列&#xff0c;相邻两个数用恰好 11 个空格隔开。 对于没有选任何…...

2021-08-06

yarn的简介&#xff1a; Yarn是facebook发布的一款取代npm的包管理工具。 yarn的特点&#xff1a; 速度超快。 Yarn 缓存了每个下载过的包&#xff0c;所以再次使用时无需重复下载。 同时利用并行下载以最大化资源利用率&#xff0c;因此安装速度更快。超级安全。 在执行代码…...

Centos服务器Open Gauss 部署

近期很多的项目由于信创要求使用一些国产的数据库&#xff0c;比如OpenGauss。OpenGuass是华为高斯DB的开源版&#xff0c;内核还是PostgreSQL&#xff0c;商业版是收费的。这里记录一下是如何安装部署 的。 官方中文文档 官方下载地址 部署要求 操作系统要求 ARM&#xff…...

Vue与Electron融合之道:从Web App到桌面App的华丽转身

Vue与Electron融合之道&#xff1a;从Web App到桌面App的华丽转身 引言Vue 与 Electron 的天然契合共享技术栈高效开发与部署用户体验升级 Vue 与 Electron 融合实战初始化项目调整Vue项目结构利用 Electron API 增强功能定制桌面应用外观构建与部署 结语 引言 Vue.js 作为一款…...

Higress 基于自定义插件访问 Redis

作者&#xff1a;钰诚 简介 基于 wasm 机制&#xff0c;Higress 提供了优秀的可扩展性&#xff0c;用户可以基于 Go/C/Rust 编写 wasm 插件&#xff0c;自定义请求处理逻辑&#xff0c;满足用户的个性化需求&#xff0c;目前插件已经支持 redis 调用&#xff0c;使得用户能够…...

Mysql的库函数

MySQL是一个流行的开源关系型数据库管理系统&#xff0c;它提供了大量的内置库函数&#xff0c;用于在查询时执行各种操作。这些函数可以帮助开发者在数据检索、转换和处理过程中实现更复杂的逻辑。 1 字符串函数 函数描述ASCII(s)返回字符串 s 的第一个字符的 ASCII 码。CHA…...

绿联 安装onlyoffice容器并启用Cloudreve的office在线预览与编辑功能

原文&#xff1a;绿联 安装onlyoffice容器并启用Cloudreve的office在线预览与编辑功能 本篇教程以配合Cloudreve扩展文档预览/编辑为目的编写&#xff0c;OnlyOffice的其他用途未深入研究也不做探讨&#xff0c;仅使用WOPI能力。 硬件要求 镜像大小&#xff1a;2.91Gb或更大 …...

金钱卦起卦

前言 本文目的&#xff1a; 1.了解什么是《易经》 2.了解什么是八卦/六十四卦 3.金钱卦起卦方法 4.如何解卦 一、什么是易经&#xff1f; 1、易经就是一本书、一本著作 2、它的成书经历了三个阶段 第一阶段&#xff1a;在5000多年前&#xff0c;由人类的始祖伏羲通过观察时…...

学透Spring Boot 003 —— Spring 和 Spring Boot 常用注解(附面试题和思维导图)

这是 学透 Spring Boot 专栏 的第三篇&#xff0c;欢迎关注我&#xff0c;与我一起学习和探讨 Spring Boot 相关知识&#xff0c;学透 Spring Boot。 从面试题说起 今天我们通过一道和Spring Boot有关的常见面试题入手。 面试题&#xff1a;说说 Spring Boot 中有哪些常用注解…...

新能源汽车充电桩常见类型及充电桩站场的智能监管方案

随着新能源汽车市场的迅猛发展&#xff0c;充电桩作为支持其运行的基础设施&#xff0c;也呈现出多样化的类型。这些充电桩不仅在外形和功能上存在差异&#xff0c;更在充电速度、充电方式以及使用场景等方面展现出独特的优势。 一、充电桩类型及区别 1、慢充桩&#xff08;交…...

让工作自动化起来!无所不能的Python

文章目录 前言一、Python是办公自动化的重要工具二、Python是提升职场竞争力的利器三、Python是企业数字化的重要平台四、Python是AI发展的重要通道之一编辑推荐内容简介作者简介目录前言为什么要写这本书 读者对象如何阅读本书赠书活动 前言 随着我国企业数字化和信息化的深入…...

Facebook轮播广告是什么?投放过程中有哪些需要注意的吗?

轮播广告是Facebook广告形式中的一种&#xff0c;可以把3—5个广告合并到一个可滚动的广告单元中。轮播广告会出现在新鲜事即News Feed中&#xff0c;是独立站卖家常用的一种广告形式 为什么选择轮播广告&#xff1f; 转化率更高&#xff1a;相较于单图广告&#xff0c;轮播广…...

3、jvm基础知识(三)

如何判断堆上的对象没有被引用&#xff1f; 常见的有两种判断方法&#xff1a;引用计数法和可达性分析法。 引用计数法会为每个对象维护一个引用计数器&#xff0c;当对象被引用时加1&#xff0c;取消引用时减1。 引用计数法的优点是实现简单&#xff0c;缺点有两点&#xff1…...

leetcode414-Third Maximum Number

这道题目求第三大数&#xff0c;如果第三大数不存在则返回最大数&#xff0c;且该数字最大值不超过2^31-1。从这个提示上就可以看出这个数字是用int类型表示的。我们当然可以通过排序的方式先给数组排序然后很容易的就能求解。但是有没有什么更好的办法呢&#xff1f;对于数组来…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...