结构化设计

一、结构化设计的第一性原理

1. 复杂性是软件工程的根本矛盾

任何软件系统本质上都面临两个冲突:

结构化设计的根本目标只有一个:

把不可控的整体复杂性,转化为可控的局部复杂性


2. 结构化设计的本质定义

结构化设计 = 面向复杂性的分治策略

它通过三条核心路径实现这一目标:

路径本质
模块化将整体问题拆分为可理解的单元
接口化在单元之间建立清晰的协作契约
信息隐藏将变化限制在局部范围

3. 三大核心原则

结构化设计的一切技术手段,都可以归结为三条不变的工程原理:

  1. 分而治之(Divide & Conquer)

    • 把大系统拆为小模块
  2. 信息隐藏(Information Hiding)

    • 将实现细节封装在模块内部
  3. 关注点分离(Separation of Concerns)

    • 让每个模块只关心一件事

二、结构化设计的认知模型

1. 从需求到实现的映射桥梁

结构化设计的核心任务是:

需求规格 → 系统结构 → 可实现的软件模型

这是一个逐层精化的过程:

层次目标
总体设计构建系统骨架
接口设计定义协作契约
数据设计确定信息结构
详细设计落地为可编码方案

2. 结构化设计的基本对象:模块

模块的本质

模块并不是“代码文件”或“函数集合”,而是:

一个稳定的职责边界 + 信息隐藏边界

更本质的定义:

模块 = 职责单元 + 变化隔离单元 + 协作单元


3. 模块化的工程意义

模块化的价值并非“拆分代码”,而是:


三、设计层次模型

结构化设计采用分层递进的思路:

1. 总体设计

目标:

本质:

构建系统的骨架模型


2. 详细设计

目标:

本质:

把结构模型转化为实现模型


四、结构化设计的三大支柱

结构化设计在工程上主要落实为三个方面:

  1. 体系结构设计
  2. 接口设计
  3. 数据设计

1. 体系结构设计

本质

体系结构设计 = 对复杂性的空间分割

它要回答:


2. 接口设计

本质

接口是模块之间的“契约”

接口的核心价值:

没有接口约束的模块化,本质只是:

“物理分割,而非逻辑分离”


3. 数据设计

本质

数据结构决定系统结构

结构化设计中:


五、从分析到设计的桥梁:DFD 转模块结构

结构化设计通常基于:

数据流图(DFD) → 模块结构图

1. 两种基本 DFD 模型

类型本质
变换型 DFD数据逐步加工转换
事务型 DFD根据事务选择处理路径

2. 设计映射逻辑

需求 → 数据流模型 → 模块结构 → 接口定义

这是结构化设计最经典的工程路线。


六、模块质量的度量:耦合与内聚

模块化是否成功,只看两个指标:

低耦合,高内聚


1. 耦合:模块之间的依赖强度

耦合的本质

耦合 = 模块之间的知识依赖程度

耦合越高:


耦合类型(从优到劣)

  1. 非直接耦合
  2. 数据耦合
  3. 标记耦合
  4. 控制耦合
  5. 外部耦合
  6. 公共耦合
  7. 内容耦合

工程原则

设计目标:将耦合不断向“数据耦合”收敛

核心手段:


2. 内聚:模块内部的凝聚程度

内聚的本质

内聚 = 模块职责的单一性


内聚类型(从优到劣)

  1. 功能内聚
  2. 顺序内聚
  3. 通信内聚
  4. 过程内聚
  5. 时间内聚
  6. 逻辑内聚
  7. 偶然内聚

工程目标

让每个模块都尽量接近:功能内聚


3. 耦合与内聚的对偶关系

耦合越低 → 模块独立性越强  内聚越高 → 模块质量越高

结构化设计的核心优化方向:

以接口为刀,切断耦合;以内聚为尺,收敛职责


七、结构化设计的启发式原则

在工程实践中,需要遵循若干经验法则:

这些原则本质都是在落实:

“可理解性优先”的设计哲学


八、接口设计:协作的治理机制

接口设计的本质是:

耦合治理

1. 三类接口

类型目标
模块接口程序内部协作
系统接口外部系统交互
人机接口用户协作

2. 人机交互设计原则

本质目标:

降低人的认知成本


九、数据设计:结构化设计的基石

结构化方法强调:

程序 = 算法 + 数据结构

数据设计决定:


两个层面

  1. 文件/存储结构设计
  2. 数据库模型设计

十、详细设计:从结构到实现

详细设计是结构化设计的落地层。

常用表达工具

这些工具的本质是:

将抽象结构转化为精确逻辑


十一、设计规约与评审

1. 设计规约

本质:

让设计从“个人理解”变为“组织知识”


2. 设计评审

评审的本质不是找错,而是:

对设计质量的组织化保证


十二、结构化设计的当代意义

虽然结构化设计诞生于传统软件工程时代,但其思想依然适用于今天:

现代技术对应思想
面向对象模块化 + 信息隐藏
分层架构结构化分解
微服务低耦合高内聚
API 设计接口化思想
DDD职责边界划分

十三、总结:结构化设计的精神内核

结构化设计的真正价值并不在于:

而在于一种工程世界观:

用结构对抗复杂性用接口治理依赖用内聚收敛职责

关联内容(自动生成)