系统架构设计高级技能 · 构件与中间件技术

news2025/1/16 2:58:08

点击进入系列文章目录

现在的一切都是为将来的梦想编织翅膀,让梦想在现实中展翅高飞。
Now everything is for the future of dream weaving wings, let the dream fly in reality.

系统架构设计高级技能 · 构件与中间件技术

  • 一、构件的定义
  • 二、构件系统架构特性
  • 三、 中间件概述
  • 四、 CBSD基于构件的模型(构件组装模型/基于构件的软件开发)
  • 五、构件的复用
    • 5.1 检索与提取构件
    • 5.2 理解与评价构件
    • 5.3 修改构件
    • 5.4 组装构件
  • 六、构件标准
  • 七、主要中间件

在这里插入图片描述

一、构件的定义

定义1: 软件构件是一种组装单元,它具有规范的接口规约和显式的语境依赖。软件构件可以被独立地部署并由第三方任意地组装。
定义2: 构件是某系统中有价值的、几乎独立的并可替换的一个部分,它在良好定义的体系结构语境内满足某清晰的功能。
定义3: 构件是一个独立发布的功能部分,可以通过其接口访问它的服务。

构件是一组通常需要同时部署的原子构件。

构件和原子构件之间的区别: 在于大多数原子构件永远都不会被单独部署,尽管它们可以被单独部署。相反,大多数原子构件都属于一个构件家族,一次部署往往涉及整个家族。

一个原子构件是一个模块和一组资源。
原子构件是部署、版本控制和替换的基本单位。 原子构件通常成组地部署,但是它也能够被单独部署。一个模块是不带单独资源的原子构件 (在这个严格定义下, Java包不是模块 ― 在Java中部署的原子单元是类文件。一个单独的包被编译成多个单独的类文件 一 每个公共类都有一个)。

模块是一组类和可能的非面向对象的结构体,比如过程或者函数。

模块、对象、构件的区别:

构件的特性是:(1)独立部署单元;(2)作为第三方的组装单元;(3)没有(外部的)可见状态。(可以用容器管理自身对外的可见状态)
一个构件可以包含多个类元素,但是一个类元素只能属于一个构件。将一个类拆分进行部署通常没什么意义。
对象的特性是:(1)一个实例单元,具有唯一的标志。(2)可能具有状态,此状态外部可见。(3)封装了自己的状态和
行为。

请添加图片描述

二、构件系统架构特性

构件系统体系结构由一组平台决策、一组构件框架和构件框架之间的互操作设计组成。

构件框架是一种专用的体系结构(通常围绕一些关键的机制),同时,也是一组固定地作用于构件层次机制的策略。

概念框架的互操作设计包括系统体系结构连接的所有框架间的互操作的规则。

构件是一组通常需要同时部署的原子构件。构件和原子构件之间的区别在于,大多数原子构件永远都不会被单独部署,尽管它们可以被单独部署。

一个原子构件是一个模块和一组资源。

模块是一组类和可能的非面向对象的结构体,比如过程或者函数。

资源是一个类型化的项的固定集合。

资源这个概念可以包含代码资源,进而包含模块。问题在于除了编译器编译一个模块或包生成的资源外,还可能存在其他的资源。在“纯对象”的方法中,资源是外部化的不可改变的对象――不可改变是因为构件没有持久化的标志,而且复制不能被区分。

如果把软件系统看成是构件的集合,那么从构件的外部形态来看,构成一个系统的构件可分为 【五类】:

(1) 独立而成熟的构件。 独立而成熟的构件得到了实际运行环境的多次检验,该类构件隐藏了所有接口,用户只需用规定好的命令进行使用。例如,数据库管理系统和操作系统等。
(2) 有限制的构件。 有限制的构件提供了接口,指出了使用的条件和前提,这种构件在装配时,会产生资源冲突、覆盖等影响,在使用时需要加以测试。 例如,各种面向对象程序设计语言中的基础类库等。
(3) 适应性构件。 适应性构件进行了包装或使用了接口技术,把 不兼容性、资源冲突等进行了处理,可以直接使用。这种构件可以不加修改地使用在各种环境中。 例如ActiveX等。
(4) 装配的构件。 装配(assemble) 的构件在安装时, 已经装配在操作系统、数据库管理系统或信息系统不同层次上, 使用胶水代码(gluecode) 就可以进行连接使用。目前一些软件商提供的大多数软件产品都属这一类。
(5) 可修改的构件。 可修改的构件可以进行版本替换。如果对原构件修改错误、增加新功能, 可以利用重新“包装”或写接口来实现构件的替换。 这种构件在应用系统开发中使用得比较多。

三、 中间件概述

中间件 是一种独立的系统软件或服务程序,可以帮助分布式应用软件在不同的技术之间共享资源。中间件可以:
1、负责客户机与服务器之间的连接和通信,以及客户机与应用层之间的高效率通信机制。
2、提供应用的负载均衡和高可用性、安全机制与管理功能,以及交易管理机制,保证交易的一致性。
3、提供应用层不同服务之间的互操作机制,以及应用层与数据库之间的连接和控制机制。
4、提供多层架构的应用开发和运行的平台,以及应用开发框架,支持模块化的应用开发。
5、屏蔽硬件、操作系统、网络和数据库的差异。
6、提供一组通用的服务去执行不同的功能,避免重复的工作,使应用之间可以协作。
中间件是一类构件。
中间件是一类系统软件。
在这里插入图片描述

简化结构、屏蔽差异、利于复用。

采用中间件技术的优点:

  • (1) 面向需求。 即设计师集中精力于业务逻辑本身。
  • (2) 业务的分隔和包容性。 应用开发人员可以按照不同的业务进行功能的划分,体现为不同的接口或交互模式。
  • (3) 设计与实现隔离。 构件对外发生作用或构件间的交互,都是通过接口进行的,构件使用者只需要知道构件的接口,而不必关心其内部实现,这是设计与实现分离的关键。
  • (4) 隔离复杂的系统资源。 架构很重要的一个功能就是将系统资源与应用构件隔离,这是保证构件可复用甚至“即插即用”的基础,与中间件的意图也是一致的。
  • (5) 符合标准的交互模型。 中间件则实现了架构的模型,实现了标准的协议。
  • (7) 软件复用。 中间件提供了构件封装、交互规则、与环境的隔离等机制,这些都为软件复用提供了方便的解决方案。
  • (8) 提供对应用构件的管理。 基于中间件的软件可以方便地进行管理,因为构件总可以通过标识机制进行划分。

四、 CBSD基于构件的模型(构件组装模型/基于构件的软件开发)

构件(Component,组件)是一个具有可重用价值的、功能相对独立的软件单元。基于构件的软件开发(ComponentBased Software Development,CBSD)模型是利用模块化方法,将整个系统模块化,并在一定构件模型的支持下,复用构件库中的一个或多个软件构件,通过组合手段高效率、高质量地构造应用软件系统的过程。

基于构件的开发模型融合了螺旋模型的许多特征,本质上是演化型的,开发过程是迭代的。基于构件的开发模型由软件的需求分析和定义、体系结构设计、构件库建立(其中构件库包括了构件获取和构件管理)、应用软件构建、测试和发布5个阶段组成。如图:

在这里插入图片描述

CBSE的构件应该具备的特征:

  • 可组装性:所有外部交互必须通过公开定义的接口进行。
  • 可部署性:构件总是二进制形式的,能作为一个独立实体在平台上运行。
  • 文档化:用户根据文档来判断构件是否满足需求。
  • 独立性:可以在无其他特殊构件的情况下进行组装和部署。
  • 标准化:符合某种标准化的构件模型。

CBSE的构件的组装顺序:

  • 顺序组装:按顺序调用己经存在的构件,可以用两个已经存在的构件来创造一个新的构件。
  • 层次组装:被调用构件的“提供”接口必须和调用构件的“请求”接口兼容。
  • 叠加组装:多个构件合并形成新构件,新构件整合原构件的功能,对外提供新的接口。

构件作为重要的软件技术和工具得到了极大的发展,这些新技术标准和工具有Microsoft的DCOM/COM,Sun的EJB,OMG的CORBA等。基于构件的开发活动从标识候选构件开始,通过搜索已有构件库,确认所需要的构件是否已经存在,如果已经存在,就从构件库中提取出来复用;如果不存在,就采用面向对象方法开发它。在提取出来的构件通过语法和语义检查后,将这些构件通过胶合代码组装到一起实现系统,这个过程是迭代的。

基于构件的开发方法使得软件开发不再一切从头开始,开发的过程就是构件组装的过程,维护的过程就是构件升级、替换和扩充的过程,其优点构件组装模型导致了软件的复用提高了软件开发的效率;构件可由一方定义其规格说明,被另一方实现,然后供给第三方使用;构件组装模型允许多个项目同时开发,降低了费用,提高了可维护性,可实现分步提交软件产品。
缺点是由于采用自定义的组装结构标准,缺乏通用的组装结构标准,引入具有较大的风险;可重用性和软件高效性不易协调,需要精干的、有经验的分析人员和开发人员,一般的开发人员插不上手,客户的满意度低;过分依赖于构件,构件库的质量影响着产品质量

构件组装是指将构件库中的构件经过适当修改后相互连接,或者将它们与当前开发项目中的构件元素相连接,最终构成新的目标软件。

构件组装技术大致可分为基于功能的组装技术、基于数据的组装技术和面向对象的组装技术。

五、构件的复用

层次对应于构件组装过程中的不同任务。
复用的维度
水平复用:不分行业领域,通用。
垂直复用:分行业领域,专用。
在这里插入图片描述

5.1 检索与提取构件

已有的 构件分类方法 可以分为三大类,分别是 关键字分类法、刻面分类法和超文本组织方法。

  • 关键字分类法: 是一种最简单的构件库组织方法,其基本思想是:根据领域分析的结果将应用领域的概念按照从抽象到具体的顺序逐次分解为树状或有向无回路图结构。每个概念用一个描述性的关键字表示。不可分解的原子级关键字包含隶属于它的某些构件。

  • 刻面分类法: 在刻面分类机制中, 定义若干用于刻画构件特征的“面”(facet) , 每个面包含若干概念, 这些概念表述构件在面上的特征。刻画可以描述构件执行的功能、被操作的数据、构件应用的语境或任意其他特征。

  • 超文本组织方法: 超文本组织方法与基于数据库系统的构件库组织方法不同,它基于全文检索技术,主要思想是:所有构件必须辅以详尽的功能或行为说明文档;说明中出现的重要概念或构件以网状链接方式相互连接;检索者在阅读文档的过程中可按照人类的联系思维方式任意跳转到包含相关概念或构件的文档;全文检索系统将用户给出的关键字与说明文档中的文字进行匹配,实现构件的浏览式检索。

在这里插入图片描述

5.2 理解与评价构件

在这里插入图片描述

5.3 修改构件

在这里插入图片描述

5.4 组装构件

在这里插入图片描述

系统构件组装分为三个不同的层次:定制(Customization) 、集成(Integration) 、扩展(Extension) 。这三个层次对应于构件组装过程中的不同任务。

六、构件标准

在这里插入图片描述

七、主要中间件

在这里插入图片描述
在这里插入图片描述
伺服对象(Servant) : CORBA对象的真正实现, 负责完成客户端请求。
对象适配器(Object Adapter) : 用于屏蔽ORB内核的实现细节, 为服务器对象的实现者提供抽象接口, 以便他们使用ORB内部的某些功能。
对象请求代理(Object Request Broker) : 解释调用并负责查找实现该请求的对象, 将参数传给找到的对象,并调用方法返回结果。客户方不需要了解服务对象的位置、通信方式、实现、激活或存储机制。
在这里插入图片描述
CORBA体系的主要内容包括以下几部分:

  • (1) 对象请求代理(Object Request Broker, ORB) 。 负责对象在分布环境中透明地收发请求和响应,它是构建分布对象应用、在异构或同构环境下实现应用间互操作的基础。
  • (2) 对象服务(Object Services) 。 为使用和实现对象而提供的基本对象集合, 这些服务应独立于应用领域。
  • (3) 公共设施(Common Facili tites) 。 向终端用户提供一组共享服务接口, 例如:系统管理、组合文档和电子邮件等。
  • (4) 应用接口(Application Interfaces) 。 由销售商提供的可控制其接口的产品,相应于传统的应用层表示,处于参考模型的最高层。
  • (5) 领域接口(Domain Interfaces) 。 为应用领域服务而提供的接口, 如OMG组织为PDM系统制定的规范。

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

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

相关文章

Vue ——09、路由模式,404和路由勾子

路由嵌套,参数传递及重定向 一、路由模式(有#号,跟没#号)二、404三、路由勾子四、在钩子函数中使用异步请求————————创作不易,如觉不错,随手点赞,关注,收藏(* ̄︶…

STM32 CubeMx教程 -- 基础知识及配置使用教程

文章目录 前言一、STM32CubeMx 界面介绍File 界面Windows 界面Help 界面Updater Settings 界面 二、STM32CubeMx 使用教程新建工程配置RCC时钟参数配置SYS参数配置时钟树Project(工程设置)Code Generator(代码生成器)工程创建 三、…

Day46:项目-购物车案例

购物车案例 准备工作 首页默认加载,其余页面懒加载 调用defineStore方法构建store 入口main做对应配置,找指南,快速开始,把elementplus引入进来 import { createApp } from "vue"; import { createPinia } from &qu…

基于香橙派和SU-03T 使用Linux实现语音控制刷抖音

硬件介绍 SU-03T之前在小车的时候使用过,详见:语音小车---6 最终整合_mjmmm的博客-CSDN博客 按照下图进行接线: 项目需求 通过语音指令来控制安卓手机刷抖音,可以实现视频切换和点赞等功能: 1. 开机播报“你好&a…

产品经理-战略-战略的含义和层级

引言 22年老板在听我做部门人员数量汇报时,当场就给我们部门员工做能力标签,过了几天就输出了一个公司所有技术岗位的能力标签。其中有一项是战略思维,该项满分是5分,我们部门同事绝大部分人都只有2分,我自己也就3…

数据结构-leetcode-环形链表Ⅱ

有了上一篇的基础,做这一篇会相对容易些,没看上一篇的一定要去看看再来。 先看题: 解题图解: 1.首先要使快慢指针相遇 2. 代码如下: struct ListNode *detectCycle(struct ListNode *head) {struct ListNode * fasthe…

IF,AND,OR 或嵌套 IF 在 Excel 中不是逻辑函数

事情并非总是我们希望的那样。 意外的事情可能发生。 例如,假设您必须将数字相除。 尝试将任何数字除以零(0)都会产生错误。 在这种情况下,逻辑功能很方便。 在本教程中,我们将涵盖以下主题。 在本教程中,…

企业架构LNMP学习笔记53

PHP扩展安装: server01和server03上安装redis扩展: 解压编译安装: shell > tar xvf redis-4.3.0.tgz shell > cd redis-4.3.0 shell > phpize shell > ./configure && make && make install 配置文件php.ini&…

JVM——3.StringTable字符串常量池

这篇文章我们来讲一下StringTable字符串常量池 目录 1.引例 2.StringTable的特性 3.StringTable的位置 4.StringTable的垃圾回收、 5.StringTable性能调优 6.总结 1.引例 首先,我们来看下面的这段程序,请思考最终的输出结果。 输出结果&#xff…

网络安全(黑客)自学​

前言 作为一个合格的网络安全工程师,应该做到攻守兼备,毕竟知己知彼,才能百战百胜。 计算机各领域的知识水平决定你渗透水平的上限。 【1】比如:你编程水平高,那你在代码审计的时候就会比别人强,写出的漏洞…

北大C++课后记录:文件读写的I/O流

前言 文件和平常用到的cin、cout流其实是一回事,可以将文件看作一个有限字符构成的顺序字符流,基于此,也可以像cin、cout读键盘数据那样对文件进行读写。 读写指针 输入流的read指针 输出流的write指针 注:这里的指针并不是普…

Type-C座子ESD整改案例分析?|深圳比创达EMC

Type-C座子ESD整改案例分析?相信不少人是有疑问的,今天深圳市比创达电子科技有限公司就跟大家解答一下! 近年来,Type-C座子是一个应用非常广泛的一款通讯端口,具有正反可插、更快的充电和数据传输、音频转换、接口转换…

摩托车题目 记录

1 《道路安全法实施条例》第五十五条第三例:摩托车后座不得乘坐未满12周岁的未成年人,轻便摩托车不得载人。 所以本题选择【错误】。 《道路交通安全法实施条例》第六十二条:驾驶机动车不得有下列行为:(六)驾驶摩托车手离车把或者在车把上悬挂物品。所以&#xff0…

LeetCode2.两数相加

一看完题,我的想法是先算出这两个链表表示的数,然后相加,然后把这个数一位一位的分配给第三个数组,这种方法应该很简单但是要遍历三次数组,于是我就想直接一遍遍历,两个链表同时往后面遍历,把这…

【Unity 实用工具篇】✨ | 编辑器扩展插件 Odin Inspector,快速上手学习

前言【Unity 实用工具篇】✨ | 编辑器扩展插件 Odin Inspector,快速上手学习一、Odin Inspector插件1.1 介绍1.2 相关网站链接1.3 效果展示二、导入插件三、基础功能介绍四、快速上手4.1 Attributes 相关4.1.1 使用Attribute更好的显示数据。Title、BoxGroup、FoldoutGroup4.1…

ruoyi权限设置的坑

如果是手动在页面加了菜单,其实会生成一条数据,也就是2001这条已经有了。 所以生成的SQL就会有重的,这一点要注意。 可以不手动创建菜单,直接使用SQL,或者就改SQL了。 手动页面创建的菜单,一个定要注意&…

Haproxy搭建 Web 群集实现负载均衡

目录 1 Haproxy 1.1 HAProxy的主要特性 1.2 HAProxy负载均衡策略 1.3 LVS、Nginx、HAproxy的区别 2 Haproxy搭建 Web 群集 2.1 haproxy 服务器部署 2.1.1 关闭防火墙 2.1.2 内核配置(实验环境可有可无) ​2.1.3 安装 Haproxy 2.1.4 Haproxy服务…

数额结构(6.1~6.8)

6-1链表的插入算法 题目: 代码 int InsertPost_link(LinkList llist,DataType x,DataType y) {LinkList mllist->next;LinkList n;while(m->data!x){mm->next;4if(mNULL){printf("not exist data %d\n",x);return 0;}}n(LinkList)malloc(si…

Navicat工具连接Oracle数据库

文章目录 准备工具NavicatNavicat的Oracle插件Oracle查看系统版本找到对应的工具版本下载 oci下载 sqlplus 步骤1.打开navicat,工具>选项>环境2.配置3.点击确定,并重启navicat4.创建oracle连接 准备工具 工欲善其事,必先利其器&#x…

《Python趣味工具》——自制emoji2(2)

今天,我们将会完成以下2个内容: 绘制静态emoji总结turtle中常用的绘图函数 文章目录 一、绘制静态emoji::sparkles: 画脸::sparkles:绘制嘴巴::sparkles:绘制眼白:绘制眼白-Part1:绘制眼白—pa…