正如前面软件架构的“决策派”概念所揭示的,软件架构可以视为一系列重要决策的集合。不仅如此,架构决策还是分层次依次展开的。
首先,伴随着对软件系统的依次分解,软件架构师应当不断做出决策,例如需要划分成哪些模块、每个模块的 职责 为何、每个模块的接口如何定义、模块间采用何种交互机制、如何满足约束和质量属性需求、如何适应可能发生的变化等等。
以一个硬件设备调试系统为例。软件架构师通过理解需求,对该设备调试系统应完成的主要目标有了全局地把握:作为设备调试系统,其主要功能是实时显示设备状态、以及支持用户发送调试命令;另外,由于是为硬件产品配套的软件系统,所以它必须容易被测试,否则是硬件故障还是软件故障将很难区分;再就是必须具有很高的性能,具体性能指标为“每秒钟能够刷新5次设备状态的显示,并同时支持一个完整命令字的发送”。如图1-3所示。
图1-3 CRC卡:设备调试系统应完成的主要目标
之后,软件架构师必须规划整个系统的具体组成。通常,对于一个独立的软件系统而言,它常常被划分为不同的子系统或分系统,每个部分承担相对独立的功能,各部分之间通过特定的交互机制进行协作。而此例中的设备调试系统则不同,它有两个相对独立的应用组成:一个桌面应用、以及一个嵌入式应用。那么,它们如何通讯呢?最终决定,将它们通过串口连接,采用RS232协议进行通讯。再接下来,架构师必须决定这两个应用分别担负哪些职责,最终的设计决策是(如图1-4中的CRC卡所示):桌面应用部分负责提供模拟控制台和状态显示;而嵌入式应用部分