软件架构设计---软件架构视图

2023-11-03

 软件架构视图

   从软件架构本身的特点出发讨论了架构建模及与特定应用领域密切相关的架构风格。本节将从对架构编档的角度对软件架构视图及其风格进行讨论。

1 软件视图的分类 

    现代软件系统非常复杂,通常在某个具体的时间内只需将注意力集中在某几个结构上(就像看病时,医生只是将注意力集中在某方面的人体结构上,骨科医生与心血管科医生关心不同的结构),结构是元素本身的集合,而视图则是捕获和表达结构(文档描述),虽然它们有区别,但在实际使用时则不严格区分,即从系统体系的角度说是结构,从文档角度说是视图,因此,本节将不再区分结构和视图术语。

    软件架构是一种无法以简单的一维方式进行说明的复杂实体,从不同侧面的描述就是视图。架构的优势也在于使用视图:每个视图强调系统的某一个方面,同时忽视系统的其他方面,以便有助于处理或理解当前问题,描述完整的系统架构必须具备完整的视图集, “4+1”方法就是一类完备视图集。

    软件视图通常分为三种类型:

    (1)模块视图类型:为系统的主要模块实现单元编档。

    (2)构件和连接件视图类型:为系统的构件和连接件执行单元编档。

    (3)分配视图类型:为软件的开发和执行环境之间的关系编档。每一视图类型中,又有一些常用的形态,可以把这些形态归纳成架构风格(简称风格),

    大量的架构风格供架构设计师选用,例如客户机/服务器是一种常见的架构风格,它是构件和连接件视图类型中的一员。架构风格是对元素和关系类型的特化,它还包括如何使用这些元素和关系类型的一组限制条件。架构结构/视图分类如表 9-10 所示。下面各小节中再分别对这三种类型及其风格从元素、关系及特征方面做进一步总结。

 

2 模块视图类型及其风格

    模块将遵循某种方式将软件系统分解成可管理的功能单元。架构模块视图是通过文档来枚举系统的主要实现单元或模块,及这些单元之间的关系。

    任务完整的架构文档必须包含有模块视图,它为源代码提供蓝图。该类型如表 9-11 所示。

    下面对模块视图的四种风格进行总结。

    (1)分解风格能展示向模块分配责任的方式。该风格总结如表 9-12 所示。

    (2)使用风格能展示模块相互依赖的方式。该风格总结如表 9-13 所示。

 

    (3)分层风格能将系统分割成一组虚拟机,通过“允许使用”关系相互关联,分层风格能帮助实现可移植性和可修改性。该风格总结如表 9-14 所示。

    (4)泛化风格能展示一个模块如何成为另一个模块的泛化或特化,从而使模块之间产生关联。它广泛应用于面向对象的系统,能展示继承性,并能用来使用模块之间的共性。该风格总结如表 9-15 所示。

 

3   C&C视图类型及其风格

    C&C 视图能定义由具有某种运行时存在的元素模型,这些元素包括进程、对象、客户机、服务器及数据存储器等。此外,它还包含作为元素的交互路径,如通信链路和协议、信息流及共享存储器访问。通常,可利用复杂的基础结构(如中间件框架、分布式通信信道和进程调度)来执行这些交互操作。该类型总结如表 9-16 所示。

    C&C 视图风格是 C&C视图类型的特化,C&C 视图风格为数不少,下面对 C&C 视图的几种风格进行总结。

    (1)管道和过滤器风格中的交互模式表现出数据流连续变换的特征。数据抵达过滤器并经过转换后由管理传送给下一个过滤器。该风格总结如表 9-17 所示。

    (2)共享数据风格通过保留持久数据来支配交互模式,持久数据由多个数据存取器和至少一个储存库保留。该风格总结如表 9-18 所示。

 

    (3)发布-订阅风格用于向一组未知接受者发送事件和消息。可在不修改生产者的情况下添加新的接受者(订阅者)。在发布-订阅风格中,构件通过事件发布进行交互。构件可订阅一组事件。该风格总结如表 9-19 所示。

    (4)客户机-服务器风格能展示构件通过请求其他构件的服务进行交互的过程,将功能划分成客户机和服务器后即可基于运行时准则把它们单独分配给各个级。该风格总结如表 9-20 所示。

    (5)对等连接系统能通过构件之间的直接交换支持服务交换。它是一种调用/返回风格。该风格总结如表 9-21 所示。

    (6)通信-进程风格的特征表现在通过各种连接件机制并发执行构件的交互,如通过同步、消息传递、数据交换、启动和停止等进行交互。该风格总结如表 9-22 所示。

 

4  分配视图类型及其风格

    硬件、文件系统和团队结构都会与软件架构进行交互,将软件架构映射到其环境的一般形式称为“分配视图类型”。该类型总结如表 9-23 所示。

    分配视图类型的三种常见风格为:

  • 部置风格:能描述构件和连接件对硬件的映射,硬件是软件执行的场所。

  • 实现风格:能描述模块对包含它们的文件系统的映射。

  • 工作任务风格:能描述模块对承担模块开发任务的人员、团队或小组的映射。

    (1)部置风格体现为 C&C 风格(如通信-进程风格)的元素被分配到执行平台。该风格总结如表 9-24 所示。

    (2)实现风格能将模块视图类型中的模块映射到开发基础结构。实现一个模块总会产生许多独立文件,必须对这些文件进行组织,以免失去对系统的控制及系统的完整性。通常利用配置管理技术进行文件管理。该风格总结如表 9-25 所示。

    (3)软件项目的时间和预算估计取决于工作分解结构(WBS),而工作分解结构则取决于软件架构。工作任务风格将软件架构映射到由人组成的团队之中,实现这一项目管理的目的。该风格总结如表 9-26 所示。

    工作任务风格与模块分解风格关系密切,它能将模块分解风格用作其分配映射的基础。这种风格能通过添加与开发工具、测试工具和配置管理系统等对应的模块分解进行扩展。工作任务风格还通常与其他风格联合使用,例如,团队工作任务可以是模块分解风格中的模块,可以是分层图中的层,也可以是多进程系统中的任务或进程。

 

5  各视图类型间的映射关系 

    为了完整地描述一个架构,必须使用多个视图,这些视图必须遵守一定的映射关系。

    (1)模块视图类型中的视图通常会映射到构件和连接件视图类型中的视图。模块实现单元将映射到运行时构件。

    (2)系统的构件和连接件视图和模块视图之间的关系可能会非常复杂。同样的代码模块可由C&C 视图的许多元素执行。反之,C&C 视图的单一构件可执行由许多模块定义的代码。同样,C&C 构件可能会拥有许多与环境进行交互的点,每个交互点由同一模块接口定义。

    (3)分配视图类型是为有效地实现软件架构的辅助性视图,它将其他视图类型中的软件元素映射到软件环境中,即反映其他视图与软件环境之间的关系。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

软件架构设计---软件架构视图 的相关文章

  • 将变量从 PHP 传递到 JavaScript 的有效方法[重复]

    这个问题在这里已经有答案了 有时我必须将一些变量从 PHP 传递到 JS 脚本 现在我是这样做的 var js variable 但这非常丑陋 我无法在 js 文件中隐藏我的 JS 脚本 因为它必须由 PHP 解析 处理这个问题的最佳解决方
  • 将日期格式(在数据库或输出中)更改为 dd/mm/yyyy - PHP MySQL

    MySQL 将日期存储在我的数据库中 默认情况下 为 YYYY MM DD 我的日期的字段类型是 DATE 我不需要任何时间存储 有没有一种简单的方法可以默认更改它到 DD MM YYYY 我在两个不同的表中调用不同的日期 并且在我的任何代
  • 如何在codeigniter中引用数据库连接?

    如何在 CodeIgniter 数据库处理程序对象中手动调用 PHP 数据库函数 如何检索连接 dbc 或者调用类似的函数mysql real escape string dbc variable 您可以调用任何 mysql 本机函数并访问
  • php postgresql pdo 从标准输入复制

    COPY table name field1 field2 field3 FROM STDIN CSV 1 2 q w 3 4 a s 5 6 d 如何通过 PDO 执行此查询 Update 问题是 PDO 驱动程序将此查询作为语句执行 例
  • 将子域重定向到 CakePHP 操作

    背景 我有一个 CakePHP 应用程序 位于 m 我想写一个根级别的 htaccess文件 它将重定向网站的 子域 作为操作的参数 例如 我想编写一个重写规则 这将导致像这样的重定向 http mysite myserver com ht
  • 如何自定义 Zend_Form 正则表达式错误消息?

    我有以下代码 postcode form gt createElement text postcode postcode gt setLabel Post code postcode gt addValidator regex false
  • PHP7 返回类型为 JSON

    PHP 7 有一个新功能 即返回类型声明 我们可以返回一个 字符串 类型 例如 function myFunction a string 我们还可以返回一个 数组 类型 例如 function myFunction a array 但是我们
  • PayPal Rest API for Payments 在沙箱中返回 NULL

    我有一个 PayPal 沙盒帐户 我可以在 PHP 上使用curl 通过 api 检索令牌 但是处理测试卡只会返回 null 有人看到代码有问题吗 这是 PayPal 沙盒的已知问题吗 下面代码片段中的客户端是伪造的 但是 如前所述 使用我
  • 在composer.json中运行命令行命令

    我正在尝试编写一个composer json 文件 该文件将连续运行多个命令行命令 作为一个示例 如下所示 scripts test createDir createDir mkdir testing 当我在终端中运行作曲家文件时使用com
  • php简单xml如何读取具有不同子节点级别的多个节点

    我有一个 xml 文件 其中包含不同的命名节点和多级子节点 每个节点之间都不同 我应该如何访问数据 需要很多嵌套的for循环吗 以下是 xml 代码示例
  • PHP DOM 获取节点值 html? (不剥离标签)

    我正在尝试使用nodeValue获取文件中div标签的innerhtml 但是此代码仅输出纯文本 并且似乎从div内部删除了所有html标签 我如何更改此代码以输出 div 的 HTML 内容而不是纯文本 并且还输出包装其子元素的主 div
  • 生成 CloudFront 签名 URL 时性能缓慢

    我正在按照此示例使用 PHP 在 CloudFront 上创建签名 URLhttp docs aws amazon com AmazonCloudFront latest DeveloperGuide CreateURL PHP html
  • MPDF 未定义索引错误

    我正在使用 MPDF 库将 HTML 转换为 PDF 这是我的代码 HTML HTML CONTENT GOES HERE HTML STRING MPDF gt WriteHTML html Converting MPDF gt Outp
  • PHPstorm - 无法在blade.php 文件中设置断点

    我正在开发 Laravel 应用程序 可以很好地调试我的控制器 php 文件 但我还想调试blade php 文件 在我当前的设置中 我遵循了所有 jetbrains 为 Laravel 推荐的设置 https confluence jet
  • PHP 是否有与 Java 的 RequestDispatcher.forward 等效的功能?

    在 Java 中我可以编写一个非常基本的 JSPindex jsp像这样 这样做的效果是用户请求index jsp 或者只是包含目录 假设index jsp是目录的默认文档 将会看到home action没有浏览器重定向 即 forward
  • 使用 shell_exec Powershell 输出到 PHP 变量

    我有一个 powershell 脚本 它输出视频文件持续时间 运行这个脚本给了我预期的结果 Folder C my path to folder File sample1 1280 720 mp4 LengthColumn 27 objSh
  • 如何使 WordPress 中的自定义模板充当受密码保护的页面?

    我正在使用自定义模板构建一个页面 问题是 我需要此页面受密码保护 或者至少可供登录用户访问 但即使我在 WordPress 管理的新页面部分中将其设置为此类 私人 密码保护 它也不会显示菜单项和内容 如果是私有的 或者它会立即显示页面内容
  • Laravel 雄辩的 withCount() 应该比 with() 慢

    所以我问这个的原因是在我当前的应用程序中withCount 与仅通过以下方式获取关系的所有数据相比 响应时间几乎增加了三倍with 并只是从前端获取长度 javascript 我认为使用的要点withCount 是为了加快查询速度 但也许我
  • PHP strtotime返回Mysql UNIX_TIMESTAMP的不同值

    我在 stackoverflow 上搜索过帖子 发现了一些类似的帖子 但我认为这是一篇不同的帖子 我的 PHP 和 Mysql 服务器的时区全部设置为 UTC 在表中我使用时间戳字段 值为 2010 11 08 02 54 15 我使用这样
  • CKEditor TypeError:c[a] 在 CodeIgniter 中未定义

    我正在尝试在基于 codeigniter 的网站中安装 CKEditor 并且我已按照本教程进行操作 Codeigniter 教程中的 CKEditor http nukium com developpement php framework

随机推荐

  • 【CPU】常见术语解释

    interrupt service routine ISR 中断服务程序 中断 指当CPU正在处理某件事情时 外部发生的某一事件 如一个电平的变化 一个脉冲沿的发生或 定时器计数溢出等 请求CPU迅速去处理 于是CPU暂时中止当前的工作 转
  • 【机器学习基础】Python机器学习入门指南(全)

    前言 机器学习 作为人工智能领域的核心组成 是计算机程序学习数据经验以优化自身算法 并产生相应的 智能化的 建议与决策的过程 一个经典的机器学习的定义是 A computer program is said to learn from ex
  • 计算机转换汉子英语,中英文切换(电脑怎么切换拼音打字)

    在打字时需要输入英文怎么切换 用搜狗等各类拼音法的话 不用切换就可自由地 中英 非常简单 没有人不知道吧 方法是 汉字状态时 按回车键就是英文字母 此时按空格键是汉字 谁能告诉我小键盘旁边 也就是全角和半角的旁边的中文和英文符号 切换的 c
  • vue-element-admin/template登录Request failed with status code 405

    问题 vue element admin vue admin template 登录不上 报错Request failed with status code 405 解决 main js的开发配置production修改为开发模式 deve
  • opencv 识别长方形_使用OpenCV检测图像中的矩形

    本文实例为大家分享了OpenCV检测图像中矩形的具体代码 供大家参考 具体内容如下 前言 1 OpenCV没有内置的矩形检测的函数 如果想检测矩形 要自己去实现 2 我这里使用的OpenCV版本是3 30 矩形检测 1 得到原始图像之后 代
  • shell基础语法

    1 变量 语法 变量名 变量值 PS 两边不能有空格 1 使用变量 变量名 ex Name wendy 声明变量 echo Name 或 echo Name 输出变量 ps 花括号可选 2 只读变量 readonly 变量 3 删除变量 u
  • maven明明本地仓库有依赖包,还会远程下载的问题

    我今天在无网的环境下 打算进行maven编译打包 可是明明有本地仓库 也配置了本地仓库 但是还是会从远程下载 然后再各大网友的帮助下 百度 谷歌 查询到主要的原因是在本地仓库的每个依赖包都存在 remote repositories文件 直
  • layui多文件上传与下载示例

    第一次写文件上传 不知道怎么下手 幸好有万能layui 方便了很多 HTML div class layui body header span class layui body header title 产品文件上传 span div di
  • 对话用友网络副总裁、用友大易创始合伙人石磊:新的人力资源红利时代已经到来

    数科星球原创 作者丨苑晶 编辑丨十里香 在这个日新月异的科技时代 无论是企业还是个人 拥抱先进的技术工具以及前沿的思维成为建立差异化优势 取得长期价值的不二法门 在真实的场景中 企业内部的管理状况更为复杂 2023年 在全行业跑步奔向增长之
  • 用python编写一个弹球游戏

    用python编写一个简单的弹球游戏 这是学习python时用来练习的一个项目 作为笔记 最终是实现一个简单的弹球游戏 效果图如下 源代码 无限命版的弹球游戏python代码 from tkinter import 来源于python的标准
  • “互联网+”定义及相关概念解析

    来源 中国互联网技术联盟 2015年5月 6月 7月 国家密集性的发布了三大重型文件 中国制造2025 大众创业万众创新政策措施意见 互联网 行动指导意见 随后 中国互联网技术联盟邀请专家委员会对此专门进行了闭门研讨和解读梳理 并将梳理成果
  • 有关res://ieframe.dll/dnserrordiagoff_webOC.htm# http://www.51hainuo.cn

    有关这个 res ieframe dll dnserrordiagoff webOC htm http www 51hainuo cn 大部分的人应该会觉得是dns错误或者dns解析本机不正常 然后就去找杀毒软件来杀毒 网上我搜索的到的很多
  • html水平导航和垂直导航,简单却实用的CSS水平和垂直导航栏【演示/源码】

    说到CSS导航栏 各种漂亮炫酷的样式都应有尽有 不过本文要介绍的是简单却又很实用的导航栏 分为水平导航栏和垂直导航栏两种样式 适合初学者学习使用 以及一些对设计要求不高的网页使用 简单却实用的CSS水平和垂直导航栏 概述 这个简单的教程将教
  • IOException parsing XML document from class path resource [applicationContent.xml]; nested exception

    Spring报错问题 IOException parsing XML document from class path resource applicationContent xml nested exception is java io
  • 深度学习算法优化系列

    1 前言 这是Google在CVPR 2018上发表的一篇int8量化的论文 题目为 Quantization and Training of Neural Networks for Efficient Integer Arithmetic
  • 机器学习数据预处理——特征选择

    引言 在机器学习的训练过程中 总是会碰到样本大 特征多的数据集 而这些数据集里面的数据有些是用处很小甚至完全无用的 如果一组数据中的无用数据占比较大时 一方面会使得模型的训练时间变长 另一方面模型容易出现欠拟合现象 而如果一组数据中作用较小
  • 你还在手动对数据进行校验,快来使用validation吧

    本篇主要讲解使用javax validation constraints org hibernate validator constraints下的校验方法对实体类进行自动校验 直接对数据进行校验 通过对接收的数据进行校验 如果不符合我们定
  • chatgpt赋能python:Python中的d是什么?详解Python字典(Dictionary)

    Python中的d是什么 详解Python字典 Dictionary 在Python中 d是一个非常重要的数据类型 d代表字典 Dictionary 它是一种可变容器模型 可以存储任意数量的键值对 字典的定义 字典使用花括号 来表示 每个键
  • C++的指针

    C 的指针 在C 中 指针被称为是C C 中的精髓所在 指针是存放内存地址的一种变量 特殊的地方就在它存放的是内存地址 计算机中的内存都是编址的 每个地址都有一个符号 指针是一个无符号整数 它是一个以当前系统寻址范围为取值范围的整数 声明指
  • 软件架构设计---软件架构视图

    软件架构视图 从软件架构本身的特点出发讨论了架构建模及与特定应用领域密切相关的架构风格 本节将从对架构编档的角度对软件架构视图及其风格进行讨论 1 软件视图的分类 现代软件系统非常复杂 通常在某个具体的时间内只需将注意力集中在某几个结构上