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

点击进入系列文章目录

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

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

相关文章

电脑大文件删除了能恢复吗 电脑大文件删除了怎么恢复

在日常办公中,电脑是必不可少的办公工具,电脑能够帮助我们储存大量的大文件,但是有时候可能会因为一些误操作或者电脑故障等情况,导致一些电脑大文件的丢失,所以今天就和大家分享一下,电脑大文件删除了能恢…

jmeter采集ELK平台海量业务日志( 采用Scroll)

由于性能测试需要,需采集某业务系统海量日志(百万以上)来使用。但Elasticsearch的结果分页size单次最大为10000(运维同事为保证ES安全)。为了能够快速采集ELK平台业务日志,可以使用以下2种方式采集&#xf…

Ubuntu下高效Vim的搭建(离线版)

软件界面 可以看到界面下方有一些常用提示信息:文件路径、format、文件类型、光标所在的坐标(x,y)、进度条(百分比)、日期时间 会提示已定义的变量名词(快速补全) 搭建方法 下载资源文件 把Vim 和 .vimrc 拷贝到家目录下,并执行tar -xvf Vim 即可。 …

社区团购商城小程序v18.1开源独立版+前端

新增后台清理缓存功能 修复定位权限 修复无法删除手机端管理员 11月新登录接口修复! 修复商家付款到零钱, 修复会员登陆不显示头像, 修复无法修改会员开添加绑定

【微信小程序】网络请求

环境&#xff1a;微信小程序开发工具 测试api&#xff08;随机获取猫咪靓照&#xff09;:https://api.thecatapi.com/v1/images/search?limit2 示例&#xff1a; 完整代码 request.wxml <button bind:tap"requestBtn" type"primary">网络请求&l…

Otter改造 增加springboot模块和HTTP调用功能

环境搭建 & 打包 环境搭建&#xff1a; 进入 $otter_home/lib 目录执行&#xff1a;bash install.sh 打包&#xff1a; 进入$otter_home目录执行&#xff1a;mvn clean install -Dmaven.test.skip -Denvrelease发布包位置&#xff1a;$otter_home/target 项目背景 阿里…

【小沐学CAD】嵌入式UI开发工具:GL Studio

文章目录 1、简介2、软件功能3、应用行业3.1 航空3.2 汽车3.3 防御3.4 工业3.5 电力与能源3.6 医疗3.7 空间3.8 科技 结语 1、简介 https://disti.com/gl-studio/ DiSTI 是 HMI 软件、虚拟驾驶舱、仪表、信息娱乐、集群显示器和嵌入式 UI 解决方案的领先提供商。 而它的GL Stu…

React如何实现国际化?

目录 一、Redux准备工作 commonTypes.js commonActions.js commonReducer.js rootReducer.js 二、然后定义SelectLang组件 index.js index.less 三、创建语言包 welcomeLocale.js index.js 四、使用 react的入口文件 App.js welcome.js 附 关于如何实现国际…

OpenCV项目实战(2)— 如何用OpenCV实现弹球动画

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。OpenCV能够在画布上绘制静态的图形&#xff0c;例如&#xff0c;线段、矩形、正方形、圆形、多边形、文字等。那么&#xff0c;能不能让这些静态的图形移动起来&#xff1f;如果能&#xff0c;又该如何编写代码呢&#xff…

论文总结《A Closer Look at Few-shot Classification Again》

原文链接 A Closer Look at Few-shot Classification Again 摘要 这篇文章主要探讨了在少样本图像分类问题中&#xff0c;training algorithm 和 adaptation algorithm的相关性问题。给出了training algorithm和adaptation algorithm是完全不想关的&#xff0c;这意味着我们…

Day46:项目-购物车案例

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

典型数据结构-栈/队列/链表、哈希查找、二叉树(BT)、线索二叉树、二叉排序树(BST树)、平衡二叉树(AVL树)、红黑树(RB树)

目录 典型数据结构列举 栈/队列/链表 树 二叉树 线索二叉树 二叉排序树 平衡二叉树&#xff08;AVL树&#xff09; 红黑树 其它树种和应用介绍 典型数据结构列举 栈/队列/链表 描述略。 一些基本的简单实现参考/数据结构简单实现/文件夹里面。 线性表详解&#xff…

Spring Boot 动态加载jar文件

Spring Boot 动态加载jar文件 接口实现&#xff1a; package org.bc.device;public interface IDeviceHandler {String start();String stop(); }实现类&#xff1a; package org.bc.device; public class MqttDevice implements IDeviceHandler{ Override public String s…

【深度学习】Pytorch 系列教程(十):PyTorch数据结构:2、张量操作(Tensor Operations):(4)索引和切片详解

目录 一、前言 二、实验环境 三、PyTorch数据结构 0、分类 1、张量&#xff08;Tensor&#xff09; 2、张量操作&#xff08;Tensor Operations&#xff09; 1. 数学运算 2. 统计计算 3. 张量变形 4. 索引和切片 使用索引访问单个元素 使用切片访问子集 使用索引和…

自动生成bug异常追踪-SRE与开发自动化协同

作者&#xff1a;观测云 数据智能部 产品方案架构师 范莹莹 简介 生产环境 bug 的定义&#xff1a;RUM 应用和 APM 应用的 error_stack 信息被捕捉后成为 bug。 以 APM 新增错误巡检为例&#xff0c;当出现新错误时&#xff0c;在观测云控制台的「事件」模块下生成新的事件报…

Vue2电商前台项目——完成加入购物车功能和购物车页面

Vue2电商前台项目——完成加入购物车功能和购物车页面 文章目录 Vue2电商前台项目——完成加入购物车功能和购物车页面一、加入购物车1、路由跳转前先发请求把商品数据给服务器&#xff08;1&#xff09;观察接口文档&#xff08;2&#xff09;写接口&#xff08;3&#xff09;…

React-Hooks 和 React-Redux

注&#xff1a;Redux最新用法参考 个人React专栏 react 初级学习 Hooks基本介绍------------------------- Hooks&#xff1a;钩子、钓钩、钩住&#xff0c; Hook 就是一个特殊的函数&#xff0c;让你在函数组件中获取状态等 React 特性 &#xff0c;是 React v16.8 中的新增功…

机器学习 day34(机器学习项目的完整周期、精确度和召回率、F1)

机器学习项目的完整周期 第一步&#xff0c;决定项目是什么。第二步&#xff0c;收集数据。第三步&#xff0c;训练模型&#xff0c;进行错误分析并改进模型&#xff0c;可能会回到第二步。第四步&#xff0c;当模型足够好后&#xff0c;部署在生产环境中&#xff0c;继续监控…

【Redis7】--3.Redis持久化

Redis持久化 Redis持久化(Redis persistence)是指将数据写入持久化存储&#xff0c;如固态硬盘(SSD) Redis提供了一系列持久化选项&#xff0c;这些包括&#xff1a; RDB(redis数据库)&#xff1a;RDB持久化方式能够在指定的时间间隔对数据进行快照存储AOF(追加文件)&#x…

axios在vue3.x中的基础入门使用

-2023.05.18更新&#xff0c;修复了之前demo中存在的3个问题。现在可以无bug跑起来。 1.axios在vue3.x中的基础入门使用 在不涉及使用axios进行请求拦截以及响应拦截的场景下&#xff0c;axios的使用可以简化为以下步骤。 step1. 使用npm安装axios npm install axios step…