所有架构级的设计决策应该根据被设计系统的功能、行为和社会学等方面的需求来作出,这是一个原则,既适用于软件架构,同样也适用于传统的建筑架构领域。“形式追随功能”的指导方针来自从数百年失败的建筑项目中获得的经验,
但是却常常被软件从业者忽视。
design-by-buzzword(按照时髦的词汇来做设计)是一种常见的现象。
一个软件架构是一个软件系统在其操作的某个阶段的运行时(run-time)元素的抽象。
软件系统通常拥有多个操作阶段,例如启动、初始化、正常处理、重新初始化和停止。每个操作阶段都有自己的架构。
软件架构的核心是抽象原则:通过封装来隐藏系统的一些细节,从而更好地识别和支持系统的属性。
软件架构是软件系统在运行时的抽象,而软件结构则是静态源代码的属性。
一个软件架构由一些架构元素(组件、连接器和数据)的配置来定义,这些元素之间的关系受到约束,以获得想要得到的一组架构属性。
一个组件是软件指令和内部状态的一个抽象单元,通过其接口提供对于数据的转换。
一个连接器是对于组件之间的通讯、协调或者合作进行仲裁的一种抽象机制。
连接器是是对于组件之间的通讯、协调或者合作进行仲裁的一种抽象机制。
连接器通过将数据元素从它的一个接口转移(transferring)到另一个接口而不改变数据,来支持组件之间的通信。在其内部,一个连接器可以包含一个由组件组成的子系统,为了转移的目的对数据进行某种转换、执行转移、然后做相反的转换并交付与原始数据相同的结果。然而,架构所捕获到的外部行为的抽象可以忽略这些细节。与之相反,从外部的角度观察,组件可以(尽管并非总是)对数据进行转换。
一个数据是组件通过一个连接器接收或发送的信息元素。
一个配置是在系统的运行期间组件、连接器和数据之间的架构关系的结构。
软件架构的架构属性集合包括了对组件、连接器和数据的选择和排列所导致的所有属性。例如:进化的相对容易程度、组件的可重用性、效率、动态扩展能力;这些常常被称作品质属性(quality attributes)。