架构设计框架是用于系统化指导架构决策的思维模型与工具集合,通过结构化的方法降低设计复杂度、支撑决策过程。
背景:所有架构问题都存在局部最优与全局最优的根本矛盾——拆分带来独立性但增加复杂度,复用减少重复但引入耦合,集中管理保证一致性但牺牲灵活性。架构师的核心职责是在这个矛盾中做出可持续的权衡。
架构设计方法论是将复杂系统进行结构化分解的思维方式,核心是分而治之——通过分解降低认知负担,通过定义分解后的交互方式管理复杂度。
| 类型 | 代表 | 分解维度 | 适用场景 |
|---|---|---|---|
| 过程驱动 | ABSD | 活动 → 构件 | 需求明确的大型系统 |
| 数据驱动 | DSSD | 数据 → 实体 | 数据密集型系统 |
| 视图驱动 | 4+1视图 | 视图 → 关注点 | 多利益相关方沟通 |
| 框架驱动 | TOGAF | 层次 → 工件 | 企业级架构治理 |
运用方法论时,架构师需要三个认知层次:
选择和应用方法论前,需明确架构设计的驱动因素,驱动因素决定分解的维度与目标:
业务需求 架构存在的首要目的,是支持业务目标的达成。业务流程、产品功能、用户体验等都将决定架构形态。
非功能需求 包括性能、可靠性、安全性、可扩展性、可维护性、成本约束等。这些隐性需求往往是架构设计成败的关键。
设计与实现限制 例如组织架构、团队能力、预算周期、既有技术栈、法律合规要求等。限制条件决定了架构设计的可行边界。
ABSD是一种以架构为核心驱动的软件开发模式。 它强调自顶向下的分解、架构风格选择、构件化实现与持续演化,通过架构模型来指导整个软件生命周期。
本质上,ABSD 适合"问题域清晰、变化可预期"的场景;不适合"需求不确定、需要快速验证假设"的场景。
功能分解是ABSD将系统级目标转化为可设计、可分工的模块单元的唯一途径
自顶向下分解:从系统整体目标出发,逐层细化功能模块。
核心目标:将需求转换为逻辑模块,实现高内聚、低耦合的系统结构。
分解过程:
选择合适的架构风格是架构设计的关键环节。架构风格决定了系统的整体形态与交互模式,是所有后续设计决策的基础——风格选错,代价极高 常见风格包括:
架构风格体现的是系统**”整体形态”与”交互模式”**的选择,是从设计原则到系统结构的第一次映射。
软件模板是构件协作的契约定义,确保分解后的模块能正确集成。用于描述系统中各个软件元素如何协作。 它定义了:
模板的目标是建立一套可重用、可扩展的”软件装配蓝图”。
架构设计不是一次性活动,而是递归式的演进过程:
目标:将需求具体化为可设计的构件单元。
目标:建立可实现、可演化、可验证的架构蓝图。
目标:让架构从设计模型转化为可运行系统。
目标:确保架构能持续支持业务变化和技术更新。
DSSA是一种面向领域的架构开发方法,强调在特定业务领域内的知识沉淀与架构复用。 与 ABSD 不同,它关注的是跨系统、跨项目的长期积累。
领域分析的目标是:
对业务领域知识进行抽象、拆解与结构化,以提炼可复用的模型和构件。
关键参与者:
过程特点:
领域设计阶段将分析成果转化为领域架构模型。
关键任务:
| 层级 | 说明 |
|---|---|
| 领域开发环境 | 聚焦知识建模与概念验证,形成领域模型原型 |
| 应用开发环境 | 将领域模型转化为可用框架与组件库 |
| 应用执行环境 | 在真实系统中验证领域架构的可行性与性能 |
这种分层有助于快速验证设计理念与复用策略。
目标:构建一个能够”越用越强”的领域架构生态系统。
| 维度 | ABSD | DSSA |
|---|---|---|
| 目标 | 从需求出发设计系统架构 | 从领域出发建立复用架构 |
| 关注点 | 单个系统生命周期 | 多系统间的领域复用 |
| 方法论 | 功能分解 + 架构风格 + 构件化 | 领域建模 + 元件库 + 迭代复用 |
| 输出物 | 架构模型、设计文档、构件集 | 领域模型、元件库、开发框架 |
| 适用场景 | 新系统开发 | 平台化、产品线开发 |
方法论本身不是问题,对方法论的误用才是问题。ABSD 与 DSSA 各自都隐含着若不规避则必然失效的认知陷阱。
| 误区 | 描述 | 后果 |
|---|---|---|
| 风格漂移 | 功能分解完成后,架构风格选择变成随意搭配 | 系统整体形态失去一致性 |
| 模板缺位 | 只做分解,不定义构件之间的协作契约 | 集成阶段出现大量接口冲突 |
| 迭代空转 | 声称"迭代",但每次迭代不反馈到更高层次 | 架构设计与实际实现持续脱节 |
| 误区 | 描述 | 后果 |
|---|---|---|
| 领域圣杯化 | 把领域模型当作终极真理,抗拒业务变化 | 模型僵化,反而成为变更阻力 |
| 元件库沉没 | 建立元件库但不建立贡献机制 | 领域资产逐渐与业务脱节,最终废弃 |
| 三层空转 | 三层模型存在,但每层没有真正的职责边界 | 形式上的分层,实质上的耦合 |
| 陷阱 | 在 ABSD 中的表现 | 在 DSSA 中的表现 |
|---|---|---|
| 局部最优强迫症 | 过度追求模块内的高内聚,忽视模块间协作成本 | 过度追求领域模型的纯粹性,忽视跨领域集成需求 |
| 设计一次性交付 | 把架构设计当作需求阶段的终点,而非起点 | 把领域资产建立当作项目结束的工作,而非持续投入 |