架构设计以系统需求为输入,以架构设计文档为输出,描述的是系统总体结构、技术要素及非功能特性的实现策略。
首先要确定的是系统在软件上的总体结构。这种结构是以组件视角来考虑的,将系统划分为若干组件,并定义组件的职责和相互关系,整个系统由这些组件相互协作来实现各种需求。需要注意的是,架构设计的视角不是功能视角,如果以功能视角来分解系统,得到的就是功能架构,而功能架构是产品人员可以完成的,通常与技术关系不大。软件组件的运行不仅需要硬件支撑,还需要描述部署架构来反映软件与硬件结合的关系。
然后确定系统中的技术要素,包括技术选型、技术机制和技术决策。这些技术要素是围绕总体结构展开的,每个组件自身、组件间关系及硬件都涉及技术选型、技术机制和技术决策。系统技术要素的构成如表1-1所示。
表1-1 系统技术要素的构成
最后确定非功能特性的实现策略。针对每种非功能性需求需要考虑实现策略,首先要考虑的是非功能性需求是可用性、性能和安全性,其次是可扩展性、可伸缩性和兼容性,其他方面根据项目情况进行补充。
以上是架构设计应该包括的内容,同时要注意架构设计不应包括的内容,避免超越工程范围,导致职责不清,影响架构设计的进度。架构设计不应包括数据库设计、界面设计、一般性功能设计,这些属于详细设计范畴。架构设计也不应包括程序设计(类设计、代码分层设计等),这些是程序员的职责,并且在工程阶段上靠后,不应提前考虑。