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

news/2024/11/19 22:41:04/

点击进入系列文章目录

现在的一切都是为将来的梦想编织翅膀,让梦想在现实中展翅高飞。
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.ppmy.cn/news/1112852.html

相关文章

前端面试话术集锦第 14 篇:高频考点(React常考基础知识点)

这是记录前端面试的话术集锦第十四篇博文——高频考点(React常考基础知识点),我会不断更新该博文。❗❗❗ 1. 生命周期 在V16版本中引入了Fiber机制。这个机制一定程度上的影响了部分生命周期的调用,并且也引入了新的2个API来解决问题。 在之前的版本中,如果你拥有一个很…

[k8s] kubectl port-forward 和kubectl expose的区别

kubectl port-forward 和 kubectl expose 是 Kubernetes 命令行工具 kubectl 提供的两种不同方式来公开服务。 kubectl port-forward kubectl port-forward 命令用于在本地主机和集群内部的 Pod 之间建立一个临时的端口转发通道。 该命令将本地机器上的一个端口绑定到集群内部…

Android开源 日志框架 LogDog V2.3.1

目录 一、简介 二、下载使用 添加jitpack 仓库 添加依赖: 三、更改 1、 LogDogV2.3.1初始化: 2、通过上面的初始化 ,已经知道IJsonEngine 优化了泛型参数,采用 Object/Any 3、优化空异常的判断,哪怕打印变量是NULL LogDog会打印“nul…

go Gorm连接数据库,并实现增删改查操作

Gorm 1. 准备工作 首先进入终端下载我们需要的包(确保go和mysql安装完成,并设置了环境变量) go get -u gorm.io/driver/mysql go get -u gorm.io/gorm有两份官方文档有对 GORM 更详细的讲解。 创建 | GORM - The fantastic ORM library f…

怎么给网络加速

首先,按winr,调出运行窗口。 输入cmd,回车,再输入gpedit.msc,调出本地组策略编辑器。 点击计算机配置下的管理模版。 再点击网络。 再点击Qos数据包计划程序。 再点击限制可保留宽带。 选择已启用,再把带宽…

def和class的区别

fed浅谈Python内 def 与 class 的区别--知识点整理(B站 - BV11g411w73x)_pythonclass和def的区别_奋进的小咸鱼的博客-CSDN博客def 是用于函数的封装代码如下:def jianfa(a,b): print(a-b) jianfa(100,9)输出结果:91class可用于多…

浅谈C++|构造.析构函数篇

一对象的初始化和处理 1.1构造函数和析构函数 C拥有构造函数和析构函数,这两个函数将会被编译器自动调用,完成对象初始化和清理工作。对象的初始化和清理工作是编译器强制要我们做的事情,因此如果我们不提供构造和析构,编译器提供…

TouchGFX之缓存位图

位图缓存是专用RAM缓冲区,应用可将位图保存(或缓存)在其中。 如果缓存了位图,在绘制位图时,TouchGFX将自动使用RAM缓存作为像素来源。位图缓存在许多情况下十分有用。 从RAM读取数据通常比从闪存读取要快(特…