简述

软件架构风格就是描述某一特定应用领域中系统组织方式的惯用方法,反映了某一特定领域中众多系统所共有的结构和语义特征,并指导如何将各个构件有效地组织成一个完整的系统。

架构风格定义了用于描述系统的语义表和一组指导构建系统的规则。

四要素:
1.提供一个词汇表
2. 定义一套配置规则
3. 定义一套语义解释原则
4. 定义对基于这种风格的系统所进行的分析

最终目的: 达到架构级的软件复用

1. 数据流风格

整体风格: 以处理数据为导向,数据按流的形式在执行过程中不断前进,不存在结构的反复和重构。

1.1 批处理

特点:

  1. 每一步处理都是独立的,而且每一步都是顺序执行的。
  2. 数据传送在步与步之间作为一个完整的整体。

典型应用: 经典数据处理、windows下的BAT程序

1.2 管道-过滤器

特点:

  1. 每个构件(过滤器)都有一组输入和输出,构件读输入数据,经过内部处理,产生输出数据。
  2. 过滤器必须是独立的实体,不能与其他过滤器共享数据,一个过滤器不知道上下游的标识,管道-过滤器网络的输出正确性不依赖于过滤器进行增量计算过程的顺序。

优点:

  1. 良好的隐蔽性、高内聚、低耦合。
  2. 允许设计者将整个系统的输入输出行为看成是多个过滤器行为的简单合成。
  3. 支持软件重用。
  4. 系统维护和增强系统性能简单。
  5. 支持并行操作。

缺点:

  1. 通常导致进程成为批处理的结构,必须将每个过滤器看成是一个完整的输入到输出的转换。
  2. 不适合处理交互的应用,当需要增量地显示改变时,问题尤为严重。
  3. 因为在数据的传输上没有通用标准,每个过滤器都增加了解析和合成数据的工作。

典型应用: 传统编译器、unix shell编写的程序

2. 调用返回风格

整体风格: 分而治之,将一个复杂的大系统分解为一些子系统,以便降低复杂度、增加可修改性。

2.1 主程序-子程序

特点:

  1. 一般为单线程控制,将问题划分为若干处理步骤,构件为主程序和子程序。
  2. 过程调用作为交互机制,即充当连接件。
  3. 调用关系具有层次性,语义逻辑表现为子程序的正确性,取决于它调用的子程序的正确性。

典型应用: 结构化开发时期的经典架构风格

2.2 面向对象


特点:

  1. 建立在数据抽象和面向对象的基础上,数据的表示方法和它们相应的操作封装在一个抽象数据类型或者对象中。
  2. 构件是对象,或者说抽象数据类型的实例。
  3. 对象是一种被成为管理者的构件,负责保持资源的完整性,对象通过函数和过程的调用来交互。

优点:

  1. 对象的表示对其他对象是隐藏的,因此这些对象可以不影响他的客户就能改变其实现方法。
  2. 设计者可以将数据存取操作分解成一些交互的代理程序的集合。

缺点:

  1. 为了使一个对象和另一个对象通过过程调用等交互,必须知道对象的标识。
  2. 必须修改所有显式调用它的其他对象,并消除由此带来的副作用(A使用B,C使用B,C对B的使用可能对A有影响)。

2.3 层次结构


特点:

  1. 层次系统组织成一个层次结构,每层为上层的服务,为下层的客户。
  2. 除了一些精心挑选的输出函数外,内部的层只对相邻的层可见。
  3. 连接件通过决定层间如何交互的协议来定义
  4. 拓扑约束包括对相邻层间交互的约束

优点:

  1. 支持基于抽象程度递增的系统设计,可以把一个复杂系统按递增的步骤分解。
  2. 支持功能增强,因为一层最多和相邻上下两层交互,因此功能的改变最多影响相邻的上下层。
  3. 支持重用,只要提供的服务接口定义不变,同一层的不同实现可以交换使用。

缺点:

  1. 并不是每个系统都可以容易地划分为分层模式。
  2. 很难找到一个合适、正确的层次抽象方法。

3. 独立构件风格

整体风格: 强调系统中的每个构件都是相对独立的个体,不直接通信,以降低耦合度、提升灵活性。

3.1 进程通信

特点:

  1. 构件是独立的进程,连接件是消息传递。
  2. 构件通常是命名过程,消息传递的方式可以是点到点,异步同步、远程过程调用。

3.2 事件驱动(隐式调用)

特点:

  1. 构件是一些模块,这些模块既可以是一些过程,可以是事件的集合
  2. 构件中的过程在一个或多个事件中注册(回调)。
  3. 不直接调用一个过程,而是出发或广播一个或多个事件。
  4. 事件的触发者并不知道哪些构件会被这些事件影响
  5. 不能假定构件的处理顺序、甚至不知道哪些过程被调用

优点:

  1. 为软件重用提供了强大支持,需要一个构件加入现存系统中,只需要将它注册到系统的事件中。
  2. 为改进系统带来 了方便,当一个构件替换另一个构件时,不会影响到其他构件的接口。

缺点:

  1. 构件放弃了对系统计算的控制:
    构件触发一个事件是,不能确定构件是否会相应他。
    知道事件注册了哪些构件的过程,也不能保证这些过程的调用顺序
  2. 数据交换问题:有时基于事件的系统必须依靠一个共享的仓库进行交互,全局性能和资源管理就成了问题
  3. 过程的语义必须依赖被触发的事件的上下文约束,关于正确的推理存在问题

典型应用: 编程环境中工具:debug断点

4. 虚拟机风格

整体风格: 人为构建一个运行环境,这个环境之上,可以解析与运行自定义的一些语言,以增加架构的灵活性。

4.1 解释器

组成:

  1. 完成解释工作的解释引擎
  2. 包含将被解释的代码存储区
  3. 记录解释引擎当前工作状态的数据结构
  4. 记录源代码被解释执行进度的数据结构

缺点: 执行效率低

典型应用:

  1. 专家系统
  2. java:一次编写,到处运行
  3. 仿真硬件执行过程

4.2 基于规则

组成:

  1. 规则集。
  2. 规则解释器
  3. 规则/数据选择器
  4. 工作内存

典型应用: 人工智能、DSS(决策支持系统)

5. 仓库风格

整体风格: 中央数据结构保存当前状态,独立构件对中央数据进行操作。

5.1 数据库系统

组成:

  1. 中央共享数据源:保存系统的当前数据状态。
  2. 多个独立处理元素:处理元素对数据元素进行操作

5.2 黑板系统

特点: 是一种问题求解模型,是组织推理步骤、控制状态数据、问题求解领域知识的概念框架。

组成:

  1. 知识源:包含独立的、与应用程序相关的知识,知识源之间不直接进行通信,只能通过黑板完成。
  2. 黑板数据结构:是按照与应用程序相关的层次来组织的解决问题的数据,知识源通过不断地改变黑板数据来解决问题。
  3. 控制:控制完全由黑板的状态驱动,黑板的状态改变决定使用的特定知识。

适用领域:

  1. 解决复杂的非结构化问题
  2. 能在求解的过程中综合运用多种不同知识源

典型应用:

  1. 信号处理:语音识别
  2. 编译优化
  3. 松耦合代理数据共享存取

5.3 超文本系统

典型应用: 静态网页

6. 其他架构风格

6.1 闭环控制架构

特点: 通过收集实际和理想的过程状态信息,并调整过程变量使得实际状态趋于理想状态。
缺点: 不适合复杂任务
典型应用: 嵌入式系统,涉及连续的动作与状态

6.2 C2

todo

常见软件架构风格介绍相关推荐

  1. API接口设计之RESTful软件架构风格

    说到API接口设计有的喜欢用Web Service,有的喜欢用WCF,当然也有还在用最原始的ashx,aspx页面的.无论采用什么方式能很好的满足业务需求就ok,但是不同的方式在扩展性.易用性,可维护 ...

  2. 系统架构_软件架构风格概述

    系统架构_软件架构风格概述                                    转载自:http://jpkc.whu.edu.cn/jpkc/dxqyxxxtfgnjg/dzja/ ...

  3. 软件架构设计——软件架构风格

    软件架构风格 软件架构设计的一个核心问题是能否使用重复的软件架构模式,即能否达到架构级别的软件重用.也就是说,能否在不同的软件系统中,使用同一架构.基于这个目的,学者们开始研究和实践软件架构的风格和类 ...

  4. 软件架构设计---软件架构风格

    软件架构风格 软件架构设计的一个核心问题是能否使用重复的软件架构模式,即能否达到架构级别的软件重用.也就是说,能否在不同的软件系统中,使用同一架构.基于这个目的,学者们开始研究和实践软件架构的风格和类 ...

  5. 软件架构设计师:软件架构风格

    软件架构设计的一个核心问题是能否使用重复的软件架构模式,即能否达到架构级别的软件重用.--基于这个目的,学者们开始研究和实践软件架构的风格和类型问题. 软件架构风格是描述某一特定应用领域中系统组织方式 ...

  6. 软件架构设计(一)——软件架构风格

    目录 一.软件架构概念 二.软件架构建模概念 三.软件架构的风格 1.数据流风格 (1)管道-过滤器 (2)批处理序列 2. 调用/返回风格 3.独立构件风格 (1).进程通信 和 事件驱动系统(隐式 ...

  7. 5大类 软件架构风格

    Garlan和 Shaw将软件架构风格分为5大类: (1) 数据流风格:包括批处理序列架构风格(Batch Sequential)和管理/过滤器架构风格(Pipes/Filters). (2) 调用/ ...

  8. 【软件架构风格】软件架构风格概述

    什么是架构风格? 软件架构风格(software architecture style)是一种约束性的架构范式,它规定了系统中各个组件之间的交互方式.组织方式以及实现方式. 软件架构风格通常具有一些典 ...

  9. 【转载】四种常见系统架构介绍

    转自于 四种常见系统架构介绍 - 宇大..大 - 博客园软件架构(software architecture)就是软件的基本结构. 合适的架构是软件成功的最重要因素之一.大型软件公司通常有专门的架构师 ...

  10. 软件架构风格 仓库风格_功能风格–第9部分

    软件架构风格 仓库风格 实用主义 在本系列中,我们进行了一次旋风之旅,浏览了我认为最重要的与函数式编程相关的主题,以及一些我认为很好的相关知识. 我们从基础开始,定义了我认为是FP的本质,并展示了如何 ...

最新文章

  1. node读写本地文件
  2. 024 Android 自定义样式对话框(AlertDialog)
  3. nagios 监控配置介绍(二)
  4. bzoj3143,P3232-[Hnoi2013]游走【数学期望,高斯消元,贪心】
  5. linux中nslookup命令功能,nslookup
  6. Winform里面的缓存,MemoryCache使用
  7. 使用 jQuery 的 Autocomplete 插件实现input输入提示功能 input 输入模糊提示demo
  8. 范伟导老师Sniffer课程资料
  9. Java定时任务中间表,mysql 通过定时任务更新中间表
  10. pem文件转cer文件
  11. 平面方程、两平面夹角、点到平面距离
  12. 【推荐】“汇新杯”新兴科技+互联网创新大赛——IT人大展拳脚的创业大赛
  13. Sparkling Logic决策引擎操作手册
  14. LaTeX中的中英文字体设置、混排
  15. libmudbus库使用的一二事
  16. 如何在电脑上添加蓝牙耳机设备
  17. ABB机器人系统和出错信息
  18. XP系统谷歌浏览器一直提示“adobe flash player 因过期而遭阻止”解决方法
  19. python输出随机字符串代码
  20. 2021海南高考成绩排名查询,海南高考排名查询方法,2021年海南高考成绩位次全省排名查询...

热门文章

  1. ffmpeg gif拆分成多张jpg
  2. 计算机ps论文范文,ps论文范文
  3. 关于VO、RVO、ORCA的个人理解
  4. javaweb响应内容类型分析工具(tomcat)
  5. html背景图片显示不出,css中背景图片显示不出来
  6. 【资源篇】在线下载B站视频(免安装)
  7. [转载]期权交易策略
  8. crmeb 一号通使用方法
  9. 两个小球碰撞速度计算方法
  10. 使用 Docker 部署的微服务在 Nacos 里注册成内网地址 导致无法微服务间互相调用的解决方案...