一个软件架构是一个软件系统在其某个阶段运行时(run-time)所有元素的抽
象。一个系统可能由很多层抽象和很多个操作阶段组成,每个抽象和操作阶段都
有自己的软件架构。
软件架构的核心是抽象原则:通过封装来隐藏系统的一些细节,从而更好地识别和支持系统的属性
现代软件架构的核心是:组件、连接器、数据。组件是在运行时执行某种功能的软件单元。这样的例子有程序、对象、进程、过滤器。
软件架构(software architecture)是软件系统在运行时的抽象,而软件结构(software structure)则是静态源代码的属性.将软件架构和源代码结构分离开来是为了更好的关注软件运行时的特性,这些特性不依赖于一个特定的组件实现.
设计文档是运行时系统的一部分?系统运行起来后,设计文档在软件架构中不扮演任何角色。大楼的图纸烧毁了,但是大楼还在。
对于基于网络的应用而言,数据元素在系统中的位置和移动常常是系统行为唯一至
关重要的决定因素.
组件
一个组件是软件指令和内部状态的一个抽象单元,通过其接口提供对于数据的转
换。软件组件就是拥有接口、其接口形式对外表现或者展示的一个具有一定独立功能的软件单元。软件组件必须拥有接口,否则不能成为组件,或者这样的组件是没有任何用处的。
组件是软件指令和内部状态的一个抽象单元,通过其接口提供对于数据的转换。转换的例子包括从二级存储将数据加载到内存、执行一些运算、转换为另外一种格式、使用其他数据来封装等等。每个组件的行为是架构的一部分,能够被其他组件观察到(observed)或看到(discerned)换句话说,组件应该由它为其他组件提供的接口和服务来定义,而不第1章软件架构12由它在接口之后的实现来定义。Parnas 将此定义为其他架构元素能够对该组件作出的一组假设。
连接器 一个连接器是对于组件之间的通讯、协调或者合作进行仲裁的一种抽象机制。 连接器的例子包括共享的表述、远程过程调用、消息传递协议和数据流。 连接器通过将数据元素从它的一个接口转移(transferring)到另一个接口而不改变数据,来支持组件之间的通信。在其内部,一个连接器可以包含一个由组件组成的子系统,为了转移的目的对数据进行某种转换、执行转移、然后做相反的转换并交付与原始数据相同的结果。
传输数据应该是链接器最重要的任务。包括客户有意义的实体数据、组件交互的交互协议数据。对于数据传输方向的选择和目的数据方向的不同,连接器可以对接受的数据进行不同的转换。这个转换应该由连接器内部的组件来完成。
数据 数据是组件通过一个连接器接收或发送的信息元素。数据的例子包括字节序列、消息、编码过的参数、以及序列化过的对象,但是不包括那些永久驻留或隐藏在组件中的信息。 在软件架构中,数据其实是一种流动的消息。在基于网络结构的设计中,数据是最重要的概念。你要选择两种模式:是在远程直接连接组件进行交互,还是将组件传递到本地在本地空间中进行交互。
|