【软考系统架构设计师】系统架构师必知必会上篇(系统架构设计)
一. 软件架构的概念
- 体系结构就是架构。架构连接起了需求分析和软件设计之间的鸿沟。
- 架构设计就是需求分配,即将满足需求的职责分配到组件上。
- 软件架构风格是描述某一特定应用领域中系统组织方式的惯用模式。架构风格定义了一个系统家族,即一个体系结构的定义的一个词汇表和一组约束。词汇表中包含一些构件和连接件的类型,而这组约束指出系统是如何将这组构件和连接件组合起来的。
- 软件架构为软件系统提供了一个结构,行为和属性的高级抽象。由构成系统的描述,这些元素的相互作用,指导元素集成的模式,以及这些模式的约束组成。
- 软件架构是项目干系人进行交流的手段。明确了对系统实现的约束条件,决定了开发和维护组织的组织结构,制约着系统的质量属性。
- 软件架构使推理和控制的更改更加的简单,有助于循序渐进的原型设计,可以作为培训的基础。
- 软件架构是可以传递和可以复用的模型。通过研究软件架构,可能预测软件的质量。
软件架构的发展史
- 汇编语言:无架构阶段
- 程序结构设计:萌芽阶段
- 统一建模语言:初级阶段
- 4+1视图:高级阶段
二. 软件架构风格
- 架构设计的一个核心问题是能否达到架构级的软件复用。
- 架构风格反映了领域中众多系统所共有的结构和语义特征,并指导如何将这些构件有效地组织成一个完整的系统。
- 架构风格定义了用于描述系统的术语表和一组指导构建系统的规则。
1. 数据流风格
- 批处理序列和管道过滤器。
1.1 批处理序列
- 构件为一系列固定顺序的计算单元,构件之间只通过数据传递交互,每个处理步骤是一个独立的程序,每一步必须在前一步结束以后才能开始。数据必须是完整的,以整体的方式进行传递。
1.2 管道过滤器
- 每个构件都有一组输入和输出。构件读输入的数据流经过内部处理,然后产生输出数据流,这个过程通常是通过对输入数据流的变换或计算来完成的。包括通过计算和增加信息以丰富数据,通过浓缩和删除以精简数据,通过改变记录方式以转化数据和递增的转化数据等,这里的构件称为过滤器,连接件就是数据传输的管道。
- 将一个过滤器的输出传到另一个过滤器的输入。早期的编译器就是采用这种架构,一步一步的处理的,均可以考虑使用这种架构风格。
2. 调用返回风格
- 主程序子程序,面向对象,层次结构风格
2.1 主程序子程序
- 单线程控制,把问题划分为若干处理的步骤,构件即为主程序和子程序。
- 子程序通常合成为模版。过程调用作为交互机制,即充当连接件的角色,通用关系具有层次性,其语义逻辑表现为主程序的正确性取决于它调用的子程序的正确性。
2.2 面向对象
- 构件就是对象,对象是抽象数据类型的实例。
- 在抽象数据类型当中,数据的表示和相应的操作被封装起来,对象的行为体现在其接受和请求的动作。连接件即是对象间交互的方式。
- 对象是通过函数和过程的调用来交互的。
2.3 分层架构
- 构件组成一个层次结构。连接件通过决定层间如何交互的协议来定义。每层为上一层提供服务,使用下一层的服务,只能见到与自己邻接的层,通过层次结构可以将大的问题分解为若干渐进的小的问题逐步解决,可以隐藏问题的复杂度,修改某一层,最多影响其相邻的两层,通常只有上层。
- 优点:
- 这种风格支持基于可增加抽象层的设计,允许将一个复杂问题分解成一个增量步骤序列来实现。
- 不同的层次处于不同抽象级别。越靠近底层则抽象层级越高,同理越靠近顶层抽象等级越低。
- 由于每一层最多只影响两层,同时只要给相邻层提供相同的接口,允许每层用不同的方法实现,同样为软件复用提供强大的支持。
- 缺点:
- 并不是每个系统都可以很容易的划分为分层的模型。
- 很难找到一个合适的正确的层次抽象方法
3.独立构件风格
- 进程通信,基于事件的调用(隐式调用)
3.1 进程通信
- 构件是独立的过程,连接件是消息的传递。
- 构件通常是命名过程,消息传递的方式可以是点对点,异步或者同步的方式,以及远程过程方法调用等。