第06章 软件架构设计 之 软件架构风格
一、软件架构风格的概念
设计软件架构的核心问题:是否能使用重复的架构模式,达到架构级的软件重用。也就是说,能否在不同的软件系统中,使用同一架构。
1、软件架构风格是描述某一特定应用领域中系统组织方式的惯用模式。
2、软件架构风格定义了一个系统家族,即一个架构定义了一个词汇表和一组约束。其中:词汇表包含了一些构件和连接件类型;约束是描述系统如何将这些构件和连接件组合起来。
3、软件架构风格反映了领域中众多系统所共有的结构和语义特征,并指导如何将各个模块和子系统有效地组织成一个完整的系统。如此理解,软件架构风格定义了用于描述系统的术语表和一组指导构件系统的规则。
4、通用软件架构的分类:数据流风格、调用/返回风格、独立构件风格、虚拟机风格、仓库风格。
二、数据流风格
分为:批处理序列、管道/过滤器(Pipe/Filter)
1、批处理序列
批处理序列风格的每一步处理都是独立的,并且每一步是顺序执行的。只有当前一步处理完成后,后一步才能开始。
数据必须是完整的,以整体的方式传递。
批处理序列风格的典型应用:经典数据处理、程序开发、window下的BAT程序。
2、管道/过滤器
管道/过滤器风格中,过滤器就是构件,每个构件都有一组输入和输出,构件读输入的数据流,经过内部处理,然后产生输出数据流;管道就是连接件,将一个过滤器的输出传到另一个过滤器的输入。
在管道/过滤器风格中,特别重要的过滤器必须是独立的实体,它不能与其他的过滤器共享数据,而且一个过滤器不知道它上游和下游的标识。
管道/过滤器风格的典型应用:unix shell编写的程序(unix的进程就是过滤器,进程运行机制就是管道)、传统的编译器。
管道/过滤器风格的优缺点:
优点:
使构件具有良好的隐藏性和高内聚、低耦合的特点;
允许设计者将整个系统的I/O行为看成多个过滤器的简单合成;
支持软件重用;
系统维护简单,可扩展性好;
允许对一些属性,如吞吐量、死锁等进行分析;
支持并行执行;
缺点:
通常导致进程成为批处理的结构;
不适合处理交互的应用;
因为在数据传输上没有通过的标准,每个过滤器都增加了解析和合成数据的工作,这样就导致了系统性能下降,并增加了编写过滤器的复杂性;
三、调用/返回风格
分为:主程序/子程序、面向对象、层次结构
1、主程序/子程序
主程序/子程序风格是一种经典的编程范型,主要应用于结构化程序设计中。
主程序/子程序风格是各程序之间是数据共享的。
主程序/子程序风格的目的是将程序划分为若干个小片段,从而使程序的更改性大大提高。
主程序/子程序风格是单线程控制的,同一时刻只有一个子节点的子程序可以得到父节点的控制。
主程序/子程序风格的构件类型:各类子程序、过程、函数、模块;连接件类型:条件、循环、查询、中断、共享信息、调用返回。
主程序/子程序风格的基本计算类型:子程序在内部处理数据;基本不变性:主程序有序地调用子程序,单线程控制。
主程序/子程序风格的典型应用:单片机时钟、数控机床。
主程序/子程序的优缺点:
优点:
SA风格的基本形式;
可以被广泛的支持、易于维护;
缺点:
除调用以外,复杂的连接件难以描述;
不易描述大规模的软件;
可复用的层次低;
2、面向对象风格
面向对象风格建立在数据抽象和面向对象的基础上,数据的表示方法和它们的相应操作封装在一个抽象数据类型或对象中。数据抽象使组件和组件之间的操作以黑箱方式进行;
封装性使细节内容对外部环境得以良好的隐藏,对象之间的访问是通过方法调用来实现的;考虑操作和属性的关联性,封装完成了相关功能和属性的包装,并由对象进行管理;
使用某个对象提供的服务并不需要知道服务内部是如何实现的。
特点:封装/继承/多态。
封装:就象一个盒子,你不需要知道里面有什么东西,只知道它有那些用处就行;
继承:就象父子关系,儿子是父亲的继承;
多态:好比一个父亲有多个儿子,各个儿子有不同的特征;
面向对象风格的构件就是对象,连接件就是对象间的消息传递。
面向对象风格的优缺点:
优点:
对象对其他对象隐藏它的表示,所以可以改变一个对象的表示,而不影响其他对象;
设计者可以将一些数据存取操作的问题分解成一些交互的代理程序的集合;
缺点:
为了使一个对象和另一个对象通过过程调用等进行交互,必须知道对象的标识。只要一个对象的标识改变了,就必须修改所有其他明确调用它的对象;
必须修改所有显式调用它的其他对象,并消除由此带来的一些副作用;
例如:A和C都使用了B,那么C对B的使用所造成的对A的影响可能是料想不到的。
3、层次结构
层次结构风格中,每一层为上层服务,并作为下层的客户。
由于每一层最多只影响两层,同时只要给相邻层提供接口,允许每层用不同的方法实现,同样为软件重用提供了强大的支持;
层次结构风格最广泛的应用:分层通信协议(在这一应用领域中,每一层提供一个抽象的功能,作为上层通信的基础);
层次结构风格示意图:
核心层是整个系统的基础,最底层的功能调用由它来实现;
中间层(功能层)在整个模型中处于一个承上启下的位置,它既要访问核心层提供的服务,来实现自身的功能;又要为应用层提供系统可用的功能;
应用层是整个系统对外的一个接口,用户通过最高层来访问整个分层系统所能提供的功能;
层与层之间采用系统设计的协议进行通讯,通讯方式往往采用过程调用;
每个层次内部都可以包含很多的功能组件(各种构件),在实际应用中中间层都不是由一个层次实现的;
三、独立构件风格
四、虚拟机风格
五、仓库风格
第06章 软件架构设计 之 软件架构风格相关推荐
- 软件架构设计_软件架构设计的三个维度,软件架构师需要知道的点,了解一下吧...
架构设计是一个非常大的话题,不管写几篇文章,接触到的始终只是冰山一角,更多的是实践中去体会.这篇文章主要介绍面向对象OO.面向方面AOP和面向服务SOA这三个要素在架构设计中的位置与作用. 架构设计有 ...
- 软件架构设计(一)——软件架构风格
目录 一.软件架构概念 二.软件架构建模概念 三.软件架构的风格 1.数据流风格 (1)管道-过滤器 (2)批处理序列 2. 调用/返回风格 3.独立构件风格 (1).进程通信 和 事件驱动系统(隐式 ...
- 软件架构设计常用方法-软件架构设计学习第五天(非原创)
文章大纲 一.需考虑问题 二.前端架构 三.应用层架构 四.服务层架构 五.存储层架构 六.后台架构 七.数据采集与监控 八.安全架构 九.数据中心机房架构 十.自动化运维 十一.参考文章 一.需考虑 ...
- 软件架构设计常用方法-软件架构设计学习第五天(非原创) 发布成功,点击查看文章...
文章大纲 一.需考虑问题 二.前端架构 三.应用层架构 四.服务层架构 五.存储层架构 六.后台架构 七.数据采集与监控 八.安全架构 九.数据中心机房架构 十.自动化运维 十一.参考文章 一.需考虑 ...
- 软考高级-系统架构师-第五章软件架构设计
本篇博文目录: 一.软件架构设计 1.软件架构的定义 2.体系结构设计(SA)与生命周期 (1) 需求分析阶段 (2) 设计阶段 (3) 实现阶段 (4) 构建组装阶段 (5) 部署阶段 (6) 后开 ...
- 软考备考-系统构架师-12-软件架构设计相关试题整理
博客迁移 不恰饭的小站 说明 1 整理2009~2016年系统构架师"软件架构设计"题目 2 内容见文档:"考点按章节整理\第 9 章 软件架构设计\软件架构设计.doc ...
- 软件架构设计---软件架构概述
像学写文章一样,在学会字.词.句之后,就应上升到段落,就应追求文章的"布局谋篇",这就是架构.通俗地讲,软件架构设计就是软件系统的"布局谋篇". 人们在软件工程 ...
- 机甲大师机器人控制(三):软件架构设计
本文是机甲大师机器人控制的系列博客之一.在功能分析的基础上,本文设计软件的架构以及定义输入输出接口. 系列博客: 机甲大师机器人控制(一):概念与流程 机甲大师机器人控制(二):功能分析 机甲大师机器 ...
- 软甲架构设计软件_几种常用软件架构设计指南
几种常用软件架构设计指南 软件架构( software architecture )是一系列相关的抽象模式,用于指导大型 软件系统各个方面的设计. 软件架构是一个系统的草图. 软件架构描述的对象是 直 ...
- 架构风格与基于网络的软件架构设计
原文链接 https://blog.csdn.net/on_1y/article/details/60358117 架构风格与基于网络的软件架构设计 如今许多服务都采用了 RESTful API, 而 ...
最新文章
- cad版本在线转换_CAD版本转换中将图纸转换为AutoCAD2018版本的方法
- Postgresql使用笔记
- 77. 组合(回溯算法)
- [ 转载 ] [经典排序算法][集锦]
- (29)基于FPGA实现看门狗功能(FPGA不积跬步101)
- 网络表示学习算法综述
- idea java api_intellij idea怎么设置java帮助文档(示例代码)
- hadoop eclipse插件
- 计算机房设计规范2008,电子计算机房设计规范.doc
- Web前端常用IDE快捷键记忆(WebSorm、VSCode)
- 前端开发学习(七七)
- 手机无线连接到电脑共享文件
- 赵小楼《天道》《遥远的救世主》解读(71)客观逻辑与离相的渊源
- 关于绿色建筑的发展促进,从技术厂家角度我们这么看!
- 2021年中国纯电动车产量、销量及投资情况分析[图]
- python在园林中的应用_浅析亭在园林中的应用
- [SDOI2009]学校食堂Dining
- excel在文本的固定位置插入字符、进行日期和时间的合并
- 锂电池充电IC-TP4056电路设计详解
- 删除桌面右键菜单AMD Catalyst Control Center选项的方法
热门文章
- 需求调第四篇--常用的调研工作方法
- FFmpeg 加水印 加马赛克
- JQuery中$.ajax()方法参数详解
- PS2021中使用Nik插件崩溃闪退|Nik Collection不兼容cc2021闪退的解决方法
- php 模拟登陆微信,微信公众平台模拟登陆有关问题
- Ant Design Of react modal框动态控制footer展示或者隐藏
- SQL Server 修改字段名
- 流程图,NS图,伪代码
- python读取word页眉_python 使用win32com实现对word文档批量替换页眉页脚
- a标签去下划线或文字添加下修饰_a标签去掉下划线_百度经验