Pre-architecture(预处理阶段)
引用文章开头的引用“凡事预则立,不预则废。——孔子”,就是说凡事提前准备了,就能成功,否则就会失败,在软件架构设计方面也是同样的道理。
什么是Pre-architecture?
Pre-architecture是架构设计的最前期阶段,包括:理解需求、建立需求大局观、确定架构设计方向等。它虽然是铺垫性质的阶段,但是对架构实践而言意义重大。所谓“磨刀不如砍柴工”。
Pre-architecture帮助架构师建立需求理解的大局观,把所有需求定位于ADMEMS二维开发矩阵之中(即业务级、用户级和系统级三级需求和功能、质量属性、约束3类需求之中)。
遗漏需求往往是架构设计失败的重要原因,用户经常得不到真正满足他们需求的系统,已经成为整个软件行业界一个严峻问题。从需求转入设计时,因为制定方案过程的复杂性,会激增出大量的衍生需求,设计需求是原始需求的50倍之多。ADMEMS矩阵方法让一线架构师告别拙劣的“需求列表”方式,可以体现更复杂、更本质的需求结构,帮助架构师更全面地看待需求、避免遗漏非功能需求,降低架构失败的风险。
“唯经验论”是错误的,架构师不仅应具有一定的经验,还必须掌握超越具体项目的、更普遍意义的方法和技能。
“目标不变论”是错误的,架构设计的目标必然是随领域不同、规模不同、条件不同而变化的
不同的需求在以不同的原理影响着架构设计:
功能 是发现职责的依据,每个功能都是由一条“职责协作链”完成的,架构师通过为功能规划自责协作链将职责分配到子系统、为子系统界定接口、确定基于接口的交互机制,来推动架构设计的进行。
质量 是完善架构设计的动力,基于当前架构设计的中间结果,进一步考虑质量要求,对架构设计的中间结果进行细化调整,一步步使架构完善起来。
约束 对架构设计的影响分为几类:直接约束设计决策的约束,转化为功能需求的约束,转化为质量属性需求的约束。
关键需求决定架构,其余需求验证架构:
功能需求做减法,所有功能中挑选出一个“关键功能子集”作为架构设计驱动力的第1部分;
质量属性需求做减法,确定架构设计重点支持哪些质量属性,这作为架构设计驱动力的第2部分;
约束性需求做加法,要充考虑需求方及业务环境因素、用户群及使用环境因素、开发方及构建环境因素、业界当前技术环境因素“4类约束”,作为架构设计驱动力的第3部分。
Pre-architecture阶段的4个步骤:
1、需求结构化,首先借助二维矩阵,梳理架构影响因素;
2、分析约束影响,识别隐含的需求(例如上面提到的转化为其他需求的约束)
3、确定关机质量,明确关键质量之间的优先级;
4、确定关键功能,有针对性的分配架构时间。