软件架构风格

目录

1. 软件架构

2. 软件架构建模

3. 软件架构风格

3.1 管道和过滤器

3.2 面向对象风格

3.3 基于事件的隐式调用风格

3.4 分层系统

3.5 仓库及知识库

3.6 C2风格

3.7 客户/服务器(C/S)风格(二层层)

3.8 三层C/S结构

3.9 浏览器/服务器(B/S)架构

3.10 领域特定架构(DSSA)

参考


1. 软件架构

软件架构风格是具有一定形式的结构化元素,即构建的集合,包括处理构件、数据构件、连接构件。

软件架构的作用:

1)软件架构是项目干系人进行交流的手段

2)软件架构是早期设计决策的体现

3)软件架构是可传递和可重用的模型

2. 软件架构建模

设计软件架构的首要问题是如何表示软件架构,即如何对软件架构进行建模。一般有5种模型:

1)结构模型:通过结构来反映系统的重要语义内容,研究结构模型的是架构描述语言

2)框架模型:不注重细节,注重整体结构。

3)动态模型:研究系统的“大颗粒”的行为性质,补充了结构和框架模型。

4)过程模型:研究构造系统的步骤和过程。

5)功能模型:一组功能构件按层次组成架构。

综合5种模型形成一个完整的模型来刻画软件的架构形成了“4+1”的视图模型

  • 逻辑视图:支持系统的功能需求,在面向对象的技术中,用对象模型来代表逻辑视图,用类图来描述逻辑视图。

  • 开发视图:也称为模块视图 ,侧重于软件模块的组织和管理。通过系统输入输出关系的模型图子系统图 来描述。

  • 物理视图:考虑如何把软件映射到硬件上,通常需要考虑到解决系统拓扑结构、系统安装、通信等问题。

  • 进程视图:系统的运行特性,主要关注一些非功能性的需求。

  • 场景(用例)视图:最重要的需求抽象,使得4个视图有机联系起来。

逻辑视图和开发视图描述系统的静态结构,进程视图和物理视图描述系统的动态结构。

3. 软件架构风格

描述某一特定应用领域中系统组织方式的惯用模式,组织方式描述了系统的组成构件和这些构件的组织方式,架构模式则反映众多系统共有的结构和语义特征。

软件架构风格定义了一个系统家族,即一个架构定义了一个词汇表和一组约束。

通用的软件架构风格分类:

  • 数据流风格:批处理序列、管道/过滤器

  • 调用/返回风格:主程序/子程序、面向对象风格、层次结构

  • 独立构件风格:进程通信、事件系统

  • 虚拟机风格:解释器、基于规则的系统

  • 仓库风格:数据库系统、超文本系统、黑板系统

3.1 管道和过滤器

每个构件都有一组输入和输出,数据输入构件,经过内部处理,然后产生输出数据。这里的构件被称为过滤器,这种风格的连接件就像是数据流传输的管道,将一个过滤器的输出,传到另一个过滤器的输入。

缺点:

  • 导致进程成为批处理结构

  • 不适合处理交互的应用

  • 数据传输没有统一标准,每个“过滤器”都需要增加解析和合成数据,系统性能下降。

(1)从交互上看,管道-过滤器风格具有顺序结构或有限的循环结构。

(2)从数据结构上看,采用流式的数据 表示。

(3)从控制结构来看,管道-过滤器具有数据驱动 的特征。

(4)从扩展方法看,管道-过滤器风格主要采用适配器方式进行扩展。

3.2 面向对象风格

抽象数据类型对软件系统有着十分重要的作用。目前软件界已经普遍转向使用面向对象系统。这种风格建立在数据抽象面向对象 的基础上。数据的表示方法和他们的相应操作封装在一个抽象数据类型或对象中。这种风格的构件是对象,或者说是抽象数据类型的实例。

缺点:

  • 对象之间的调用必须通过对象标识,一个对象的标识改变了,就必须修改所有调用它的对象

  • 架构的构建是对象

3.3 基于事件的隐式调用风格

事件驱动系统风格不直接调用一个过程,而是触发或者广播一个或者多个事件。系统中其他构件的过程在一个或者多个事件中注册。当一个事件触发的时候,系统自动调用在这个事件中注册的所有过程,这样,一个事件的触发就导致了另一个模块中的过程的调用。

这种架构风格的构件是一些模块 ,这些模块可以是一些过程,也可以是一些事件的集合。事件的触发者

并不知道哪些构件会受到事件影响。

缺点:

  • 构件放弃了对系统计算的控制:一个构件触发事件时,不能确定其他构件是否会响应它。

  • 数据交换问题:数据被一个事件传递,基于事件的系统就必须靠一个共享的仓库进行交互。全局性能和资源管理器便成了问题。

  • 过程的语义必须依赖于被触发事件的上下文约束

3.4 分层系统

层次系统组成一个层次结构,每一层为上一层服务,并作为下一层的潜在客户 。在一些层次结构系统中,除了一些精心挑选的输出函数外,内部的层接口只对相邻的层可见。这样的系统中构件在一些层实现了虚拟机。连接件通过决定层间如何交互的协议来定义,拓扑约束包括对相邻层间交互的约束。由于每一层最多只影响2层,同时只需要给相邻的层提供接口,允许每层用不同的方法来实现,同样为软件的重用提供了强大的支持。

该风格支持基于可增加抽象层的设计。层次系统最大的应用是分层通信协议

缺点:

  • 并不是每个系统都可以很容易划分为分层的模式

  • 分层产生性能问题

  • 很难找到一个合适的、正确的层次抽象方法

3.5 仓库及知识库

在仓库风格中,有两种不同的构件:

  • 中央数据结构:说明当前状态

  • 独立构件:在中央数据存储上执行。

如果构件控制共享数据,则仓库是一传统型数据库;

如果中央数据结构的当前状态触发进程执行的选择,则仓库是黑板系统。

(1)从交互上看,数据仓库风格,独立的构件(工具)之间无直接交互,通过中央数据(数据仓库)进行间接交互。

(2)从数据结构上看,数据仓库以文件或模型为主要数据结构。

(3)从控制结构看,数据仓库风格以业务功能驱动

(4)从扩展方法看,数据仓库风格中,每个工具(独立构件)需要与数据仓库(中央数据结构)进行数据适配

3.6 C2风格

C2体系结构风格可以概括为通过链接件绑定在一起,按照一定的规则运作的并行构件网络。C2风格中的系统组织规则如下:

  • 系统中的构件和连接件都有一个顶部和一个底部

  • 构件的顶部应连接到某连接件的底部,构件的底部应连接到某连接件的顶部

  • 一个连接件可以和任意数目的其他构件和连接件连接

  • 当两个连接件进行直接连接时,必须由其中一个的底部到另一个的顶部。

3.7 客户/服务器(C/S)风格(二层层)

C/S架构在信息产业中有十分重要的作用。它由三个部分组成:数据库服务器客户应用程序网络。 客户应用程序和服务器构件分别运行在不同的计算机上。是一种胖客户机、瘦服务器 的软件架构风格。应用程序被分为表示层数据层两个部分。

缺点:

  • 开发成本高:对客户端软硬件配置要求较高。

  • 客户端程序设计复杂,大部分工作量放啊在客户端上

  • 信息内容和形式单一:传统应用一般为事务分割,界面基本遵循数据库的字段解释

  • 用户界面风格不一:不利于退关使用

  • 软件一直困难:采用不同平台和工具开发的软件,一般互不兼容

  • 软件维护和升级困难

  • 新技术不能轻易使用

3.8 三层C/S结构

三层C/S结构相比于二层C/S结构,多加了一个应用服务器 ,整个应用的逻辑驻留在应用服务器上,只有表示层存在于客户机上。 应用程序被分为表示层功能层数据层三个部分。在三层C/S架构中,中间件 是最重要的构建。

优点:

  • 允许合理划分三层结构的功能,逻辑上保持独立

  • 允许灵活有效地选择相应的平台和引脚系统

  • 应用的各层可以并行开发

  • 运行充分利用功能层有效地隔离开表示层和数据层

缺点:

  • 各层通信效率不高

  • 性能不佳,必须谨慎选择三层间的通信方法、通信频度和数据量。

3.9 浏览器/服务器(B/S)架构

B/S 风格就是上述三层应用结构的一种实现方式。其具体的结构就是 浏览器Web服务器数据库服务器。使用浏览器,真正达到了“零客户端”的功能。

缺点:

  • 缺乏对动态页面的支持能力,没有集成有效的数据库处理功能

  • 系统扩展能力差,安全性难以控制

  • 数据查询的响应速度上,远远低于C/S架构

  • 数据提交一般以页面为单位,数据的动态交互性不强,不利于OLTP应用

3.10 领域特定架构(DSSA)

参考

  • 《系统架构师》

关于作者:

犇叔,浙江大学计算机科学与技术专业,研究生毕业,而立有余。先后在华为、阿里巴巴和字节跳动,从事技术研发工作,资深研发专家。主要研究领域包括虚拟化、分布式技术和存储系统(包括CPU与计算、GPU异构计算、分布式块存储、分布式数据库等领域)、高性能RDMA网络协议和数据中心应用、Linux内核等方向。

专业方向爱好:数学、科学技术应用

关注犇叔,期望为您带来更多科研领域的知识和产业应用。

内容坚持原创,坚持干货有料。坚持长期创作,关注犇叔不迷路

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敩科炼技堂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值