📌目录
- [⚖️ 模块化:软件设计的核心思想](#⚖️ 模块化:软件设计的核心思想)
-
- [🎯 一、模块化概述](#🎯 一、模块化概述)
- [📦 二、模块化的基本原则](#📦 二、模块化的基本原则)
- [🌐 三、模块的内聚性](#🌐 三、模块的内聚性)
- [📊 四、模块的耦合性](#📊 四、模块的耦合性)
- [💡 五、模块独立性](#💡 五、模块独立性)
- [📋 六、模块的分解方法](#📋 六、模块的分解方法)
- [📝 七、模块化设计方法](#📝 七、模块化设计方法)
- [📊 八、模块化设计实例](#📊 八、模块化设计实例)
- [📝 总结](#📝 总结)

⚖️ 模块化:软件设计的核心思想
模块化(Modularity)是软件设计的基本原则和核心思想,它将复杂的软件系统分解为若干个相对独立的模块,每个模块完成特定的功能。本文将详细介绍模块化的概念、原则、内聚性、耦合性以及模块化设计方法。

🎯 一、模块化概述
(一)模块化的定义
模块化是将一个复杂的系统分解为若干个相对独立的、具有特定功能的模块的过程。
模块化概念:
#mermaid-svg-SJ84yi3QTCzgfTVr{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-SJ84yi3QTCzgfTVr .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-SJ84yi3QTCzgfTVr .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-SJ84yi3QTCzgfTVr .error-icon{fill:#552222;}#mermaid-svg-SJ84yi3QTCzgfTVr .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-SJ84yi3QTCzgfTVr .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-SJ84yi3QTCzgfTVr .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-SJ84yi3QTCzgfTVr .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-SJ84yi3QTCzgfTVr .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-SJ84yi3QTCzgfTVr .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-SJ84yi3QTCzgfTVr .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-SJ84yi3QTCzgfTVr .marker{fill:#333333;stroke:#333333;}#mermaid-svg-SJ84yi3QTCzgfTVr .marker.cross{stroke:#333333;}#mermaid-svg-SJ84yi3QTCzgfTVr svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-SJ84yi3QTCzgfTVr p{margin:0;}#mermaid-svg-SJ84yi3QTCzgfTVr .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-SJ84yi3QTCzgfTVr .cluster-label text{fill:#333;}#mermaid-svg-SJ84yi3QTCzgfTVr .cluster-label span{color:#333;}#mermaid-svg-SJ84yi3QTCzgfTVr .cluster-label span p{background-color:transparent;}#mermaid-svg-SJ84yi3QTCzgfTVr .label text,#mermaid-svg-SJ84yi3QTCzgfTVr span{fill:#333;color:#333;}#mermaid-svg-SJ84yi3QTCzgfTVr .node rect,#mermaid-svg-SJ84yi3QTCzgfTVr .node circle,#mermaid-svg-SJ84yi3QTCzgfTVr .node ellipse,#mermaid-svg-SJ84yi3QTCzgfTVr .node polygon,#mermaid-svg-SJ84yi3QTCzgfTVr .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-SJ84yi3QTCzgfTVr .rough-node .label text,#mermaid-svg-SJ84yi3QTCzgfTVr .node .label text,#mermaid-svg-SJ84yi3QTCzgfTVr .image-shape .label,#mermaid-svg-SJ84yi3QTCzgfTVr .icon-shape .label{text-anchor:middle;}#mermaid-svg-SJ84yi3QTCzgfTVr .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-SJ84yi3QTCzgfTVr .rough-node .label,#mermaid-svg-SJ84yi3QTCzgfTVr .node .label,#mermaid-svg-SJ84yi3QTCzgfTVr .image-shape .label,#mermaid-svg-SJ84yi3QTCzgfTVr .icon-shape .label{text-align:center;}#mermaid-svg-SJ84yi3QTCzgfTVr .node.clickable{cursor:pointer;}#mermaid-svg-SJ84yi3QTCzgfTVr .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-SJ84yi3QTCzgfTVr .arrowheadPath{fill:#333333;}#mermaid-svg-SJ84yi3QTCzgfTVr .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-SJ84yi3QTCzgfTVr .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-SJ84yi3QTCzgfTVr .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-SJ84yi3QTCzgfTVr .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-SJ84yi3QTCzgfTVr .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-SJ84yi3QTCzgfTVr .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-SJ84yi3QTCzgfTVr .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-SJ84yi3QTCzgfTVr .cluster text{fill:#333;}#mermaid-svg-SJ84yi3QTCzgfTVr .cluster span{color:#333;}#mermaid-svg-SJ84yi3QTCzgfTVr div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-SJ84yi3QTCzgfTVr .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-SJ84yi3QTCzgfTVr rect.text{fill:none;stroke-width:0;}#mermaid-svg-SJ84yi3QTCzgfTVr .icon-shape,#mermaid-svg-SJ84yi3QTCzgfTVr .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-SJ84yi3QTCzgfTVr .icon-shape p,#mermaid-svg-SJ84yi3QTCzgfTVr .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-SJ84yi3QTCzgfTVr .icon-shape .label rect,#mermaid-svg-SJ84yi3QTCzgfTVr .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-SJ84yi3QTCzgfTVr .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-SJ84yi3QTCzgfTVr .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-SJ84yi3QTCzgfTVr :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 复杂系统
模块分解
模块A
模块B
模块C
模块D
功能1
功能2
功能3
功能4
(二)模块的定义
模块是程序中逻辑上相关的代码单元,具有明确的边界和功能。
模块特征:
| 特征 | 说明 |
|---|---|
| 功能明确 | 完成特定功能 |
| 边界清晰 | 有明确的输入输出 |
| 相对独立 | 与其他模块依赖少 |
| 可替换性 | 可以独立替换 |
| 可复用性 | 可以在多处使用 |
(三)模块化的好处
模块化好处:
#mermaid-svg-xAYBoFOXzvmz0RwZ{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-xAYBoFOXzvmz0RwZ .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-xAYBoFOXzvmz0RwZ .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-xAYBoFOXzvmz0RwZ .error-icon{fill:#552222;}#mermaid-svg-xAYBoFOXzvmz0RwZ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-xAYBoFOXzvmz0RwZ .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-xAYBoFOXzvmz0RwZ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-xAYBoFOXzvmz0RwZ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-xAYBoFOXzvmz0RwZ .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-xAYBoFOXzvmz0RwZ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-xAYBoFOXzvmz0RwZ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-xAYBoFOXzvmz0RwZ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-xAYBoFOXzvmz0RwZ .marker.cross{stroke:#333333;}#mermaid-svg-xAYBoFOXzvmz0RwZ svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-xAYBoFOXzvmz0RwZ p{margin:0;}#mermaid-svg-xAYBoFOXzvmz0RwZ .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-xAYBoFOXzvmz0RwZ .cluster-label text{fill:#333;}#mermaid-svg-xAYBoFOXzvmz0RwZ .cluster-label span{color:#333;}#mermaid-svg-xAYBoFOXzvmz0RwZ .cluster-label span p{background-color:transparent;}#mermaid-svg-xAYBoFOXzvmz0RwZ .label text,#mermaid-svg-xAYBoFOXzvmz0RwZ span{fill:#333;color:#333;}#mermaid-svg-xAYBoFOXzvmz0RwZ .node rect,#mermaid-svg-xAYBoFOXzvmz0RwZ .node circle,#mermaid-svg-xAYBoFOXzvmz0RwZ .node ellipse,#mermaid-svg-xAYBoFOXzvmz0RwZ .node polygon,#mermaid-svg-xAYBoFOXzvmz0RwZ .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-xAYBoFOXzvmz0RwZ .rough-node .label text,#mermaid-svg-xAYBoFOXzvmz0RwZ .node .label text,#mermaid-svg-xAYBoFOXzvmz0RwZ .image-shape .label,#mermaid-svg-xAYBoFOXzvmz0RwZ .icon-shape .label{text-anchor:middle;}#mermaid-svg-xAYBoFOXzvmz0RwZ .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-xAYBoFOXzvmz0RwZ .rough-node .label,#mermaid-svg-xAYBoFOXzvmz0RwZ .node .label,#mermaid-svg-xAYBoFOXzvmz0RwZ .image-shape .label,#mermaid-svg-xAYBoFOXzvmz0RwZ .icon-shape .label{text-align:center;}#mermaid-svg-xAYBoFOXzvmz0RwZ .node.clickable{cursor:pointer;}#mermaid-svg-xAYBoFOXzvmz0RwZ .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-xAYBoFOXzvmz0RwZ .arrowheadPath{fill:#333333;}#mermaid-svg-xAYBoFOXzvmz0RwZ .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-xAYBoFOXzvmz0RwZ .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-xAYBoFOXzvmz0RwZ .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-xAYBoFOXzvmz0RwZ .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-xAYBoFOXzvmz0RwZ .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-xAYBoFOXzvmz0RwZ .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-xAYBoFOXzvmz0RwZ .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-xAYBoFOXzvmz0RwZ .cluster text{fill:#333;}#mermaid-svg-xAYBoFOXzvmz0RwZ .cluster span{color:#333;}#mermaid-svg-xAYBoFOXzvmz0RwZ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-xAYBoFOXzvmz0RwZ .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-xAYBoFOXzvmz0RwZ rect.text{fill:none;stroke-width:0;}#mermaid-svg-xAYBoFOXzvmz0RwZ .icon-shape,#mermaid-svg-xAYBoFOXzvmz0RwZ .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-xAYBoFOXzvmz0RwZ .icon-shape p,#mermaid-svg-xAYBoFOXzvmz0RwZ .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-xAYBoFOXzvmz0RwZ .icon-shape .label rect,#mermaid-svg-xAYBoFOXzvmz0RwZ .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-xAYBoFOXzvmz0RwZ .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-xAYBoFOXzvmz0RwZ .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-xAYBoFOXzvmz0RwZ :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 模块化好处
可维护性
可理解性
可测试性
可复用性
可修改性
开发效率
易于维护
易于理解
易于测试
易于复用
易于修改
提高效率
好处详解:
| 好处 | 说明 |
|---|---|
| 可维护性 | 模块独立,易于定位和修复问题 |
| 可理解性 | 模块功能明确,易于理解 |
| 可测试性 | 模块可以独立测试 |
| 可复用性 | 模块可以在多个系统中复用 |
| 可修改性 | 修改一个模块不影响其他模块 |
| 开发效率 | 可以并行开发不同模块 |
📦 二、模块化的基本原则
(一)分解原则
分解原则:
| 原则 | 说明 |
|---|---|
| 模块化分解 | 将系统分解为模块 |
| 层次化分解 | 按层次逐步分解 |
| 功能分解 | 按功能进行分解 |
| 数据分解 | 按数据进行分解 |
(二)设计原则
设计原则:
#mermaid-svg-7it8rhCgDCt3caVY{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-7it8rhCgDCt3caVY .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-7it8rhCgDCt3caVY .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-7it8rhCgDCt3caVY .error-icon{fill:#552222;}#mermaid-svg-7it8rhCgDCt3caVY .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-7it8rhCgDCt3caVY .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-7it8rhCgDCt3caVY .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-7it8rhCgDCt3caVY .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-7it8rhCgDCt3caVY .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-7it8rhCgDCt3caVY .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-7it8rhCgDCt3caVY .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-7it8rhCgDCt3caVY .marker{fill:#333333;stroke:#333333;}#mermaid-svg-7it8rhCgDCt3caVY .marker.cross{stroke:#333333;}#mermaid-svg-7it8rhCgDCt3caVY svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-7it8rhCgDCt3caVY p{margin:0;}#mermaid-svg-7it8rhCgDCt3caVY .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-7it8rhCgDCt3caVY .cluster-label text{fill:#333;}#mermaid-svg-7it8rhCgDCt3caVY .cluster-label span{color:#333;}#mermaid-svg-7it8rhCgDCt3caVY .cluster-label span p{background-color:transparent;}#mermaid-svg-7it8rhCgDCt3caVY .label text,#mermaid-svg-7it8rhCgDCt3caVY span{fill:#333;color:#333;}#mermaid-svg-7it8rhCgDCt3caVY .node rect,#mermaid-svg-7it8rhCgDCt3caVY .node circle,#mermaid-svg-7it8rhCgDCt3caVY .node ellipse,#mermaid-svg-7it8rhCgDCt3caVY .node polygon,#mermaid-svg-7it8rhCgDCt3caVY .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-7it8rhCgDCt3caVY .rough-node .label text,#mermaid-svg-7it8rhCgDCt3caVY .node .label text,#mermaid-svg-7it8rhCgDCt3caVY .image-shape .label,#mermaid-svg-7it8rhCgDCt3caVY .icon-shape .label{text-anchor:middle;}#mermaid-svg-7it8rhCgDCt3caVY .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-7it8rhCgDCt3caVY .rough-node .label,#mermaid-svg-7it8rhCgDCt3caVY .node .label,#mermaid-svg-7it8rhCgDCt3caVY .image-shape .label,#mermaid-svg-7it8rhCgDCt3caVY .icon-shape .label{text-align:center;}#mermaid-svg-7it8rhCgDCt3caVY .node.clickable{cursor:pointer;}#mermaid-svg-7it8rhCgDCt3caVY .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-7it8rhCgDCt3caVY .arrowheadPath{fill:#333333;}#mermaid-svg-7it8rhCgDCt3caVY .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-7it8rhCgDCt3caVY .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-7it8rhCgDCt3caVY .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-7it8rhCgDCt3caVY .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-7it8rhCgDCt3caVY .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-7it8rhCgDCt3caVY .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-7it8rhCgDCt3caVY .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-7it8rhCgDCt3caVY .cluster text{fill:#333;}#mermaid-svg-7it8rhCgDCt3caVY .cluster span{color:#333;}#mermaid-svg-7it8rhCgDCt3caVY div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-7it8rhCgDCt3caVY .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-7it8rhCgDCt3caVY rect.text{fill:none;stroke-width:0;}#mermaid-svg-7it8rhCgDCt3caVY .icon-shape,#mermaid-svg-7it8rhCgDCt3caVY .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-7it8rhCgDCt3caVY .icon-shape p,#mermaid-svg-7it8rhCgDCt3caVY .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-7it8rhCgDCt3caVY .icon-shape .label rect,#mermaid-svg-7it8rhCgDCt3caVY .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-7it8rhCgDCt3caVY .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-7it8rhCgDCt3caVY .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-7it8rhCgDCt3caVY :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 设计原则
模块化
抽象
信息隐藏
高内聚
低耦合
模块独立
分解为模块
抽象本质
隐藏细节
内部紧密
间依赖少
功能独立
原则详解:
| 原则 | 说明 |
|---|---|
| 模块化 | 将系统分解为模块 |
| 抽象 | 抽取本质特征,忽略细节 |
| 信息隐藏 | 模块内部信息对外隐藏 |
| 高内聚 | 模块内部元素紧密相关 |
| 低耦合 | 模块间依赖关系简单 |
| 模块独立 | 模块功能独立 |
🌐 三、模块的内聚性
(一)内聚性的定义
内聚性(Cohesion)衡量模块内部各元素之间的关联程度。
内聚性概念:
#mermaid-svg-Q1azD9FCO51msdK5{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-Q1azD9FCO51msdK5 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-Q1azD9FCO51msdK5 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-Q1azD9FCO51msdK5 .error-icon{fill:#552222;}#mermaid-svg-Q1azD9FCO51msdK5 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Q1azD9FCO51msdK5 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-Q1azD9FCO51msdK5 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Q1azD9FCO51msdK5 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Q1azD9FCO51msdK5 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-Q1azD9FCO51msdK5 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Q1azD9FCO51msdK5 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Q1azD9FCO51msdK5 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Q1azD9FCO51msdK5 .marker.cross{stroke:#333333;}#mermaid-svg-Q1azD9FCO51msdK5 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Q1azD9FCO51msdK5 p{margin:0;}#mermaid-svg-Q1azD9FCO51msdK5 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-Q1azD9FCO51msdK5 .cluster-label text{fill:#333;}#mermaid-svg-Q1azD9FCO51msdK5 .cluster-label span{color:#333;}#mermaid-svg-Q1azD9FCO51msdK5 .cluster-label span p{background-color:transparent;}#mermaid-svg-Q1azD9FCO51msdK5 .label text,#mermaid-svg-Q1azD9FCO51msdK5 span{fill:#333;color:#333;}#mermaid-svg-Q1azD9FCO51msdK5 .node rect,#mermaid-svg-Q1azD9FCO51msdK5 .node circle,#mermaid-svg-Q1azD9FCO51msdK5 .node ellipse,#mermaid-svg-Q1azD9FCO51msdK5 .node polygon,#mermaid-svg-Q1azD9FCO51msdK5 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-Q1azD9FCO51msdK5 .rough-node .label text,#mermaid-svg-Q1azD9FCO51msdK5 .node .label text,#mermaid-svg-Q1azD9FCO51msdK5 .image-shape .label,#mermaid-svg-Q1azD9FCO51msdK5 .icon-shape .label{text-anchor:middle;}#mermaid-svg-Q1azD9FCO51msdK5 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-Q1azD9FCO51msdK5 .rough-node .label,#mermaid-svg-Q1azD9FCO51msdK5 .node .label,#mermaid-svg-Q1azD9FCO51msdK5 .image-shape .label,#mermaid-svg-Q1azD9FCO51msdK5 .icon-shape .label{text-align:center;}#mermaid-svg-Q1azD9FCO51msdK5 .node.clickable{cursor:pointer;}#mermaid-svg-Q1azD9FCO51msdK5 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-Q1azD9FCO51msdK5 .arrowheadPath{fill:#333333;}#mermaid-svg-Q1azD9FCO51msdK5 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-Q1azD9FCO51msdK5 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-Q1azD9FCO51msdK5 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Q1azD9FCO51msdK5 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-Q1azD9FCO51msdK5 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Q1azD9FCO51msdK5 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-Q1azD9FCO51msdK5 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-Q1azD9FCO51msdK5 .cluster text{fill:#333;}#mermaid-svg-Q1azD9FCO51msdK5 .cluster span{color:#333;}#mermaid-svg-Q1azD9FCO51msdK5 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-Q1azD9FCO51msdK5 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-Q1azD9FCO51msdK5 rect.text{fill:none;stroke-width:0;}#mermaid-svg-Q1azD9FCO51msdK5 .icon-shape,#mermaid-svg-Q1azD9FCO51msdK5 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Q1azD9FCO51msdK5 .icon-shape p,#mermaid-svg-Q1azD9FCO51msdK5 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-Q1azD9FCO51msdK5 .icon-shape .label rect,#mermaid-svg-Q1azD9FCO51msdK5 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Q1azD9FCO51msdK5 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-Q1azD9FCO51msdK5 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-Q1azD9FCO51msdK5 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 内聚性
模块内部
元素关联程度
高内聚
低内聚
元素紧密相关
元素松散关联
(二)内聚性类型
内聚性类型:
| 内聚类型 | 说明 | 强度 | 示例 |
|---|---|---|---|
| 偶然内聚 | 模块内元素无关联 | 最弱 | 随意组合的代码 |
| 逻辑内聚 | 执行逻辑相关的功能 | 弱 | 多功能选择模块 |
| 时间内聚 | 在同一时间段执行 | 弱 | 初始化模块 |
| 过程内聚 | 按特定顺序执行 | 中等 | 流程处理模块 |
| 通信内聚 | 使用相同数据 | 较强 | 数据处理模块 |
| 顺序内聚 | 前一元素输出是后一元素输入 | 强 | 流水线模块 |
| 功能内聚 | 共同完成单一功能 | 最强 | 单一功能模块 |
(三)内聚性示例
偶然内聚示例:
模块A:
- 计算员工工资
- 打印报表
- 读取配置文件
功能内聚示例:
模块B:计算员工工资
- 读取员工数据
- 计算基本工资
- 计算奖金
- 计算扣款
- 计算总工资
(四)内聚性比较
内聚性比较:
#mermaid-svg-8GBghgyUqGFLfRtZ{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-8GBghgyUqGFLfRtZ .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-8GBghgyUqGFLfRtZ .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-8GBghgyUqGFLfRtZ .error-icon{fill:#552222;}#mermaid-svg-8GBghgyUqGFLfRtZ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-8GBghgyUqGFLfRtZ .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-8GBghgyUqGFLfRtZ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-8GBghgyUqGFLfRtZ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-8GBghgyUqGFLfRtZ .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-8GBghgyUqGFLfRtZ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-8GBghgyUqGFLfRtZ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-8GBghgyUqGFLfRtZ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-8GBghgyUqGFLfRtZ .marker.cross{stroke:#333333;}#mermaid-svg-8GBghgyUqGFLfRtZ svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-8GBghgyUqGFLfRtZ p{margin:0;}#mermaid-svg-8GBghgyUqGFLfRtZ .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-8GBghgyUqGFLfRtZ .cluster-label text{fill:#333;}#mermaid-svg-8GBghgyUqGFLfRtZ .cluster-label span{color:#333;}#mermaid-svg-8GBghgyUqGFLfRtZ .cluster-label span p{background-color:transparent;}#mermaid-svg-8GBghgyUqGFLfRtZ .label text,#mermaid-svg-8GBghgyUqGFLfRtZ span{fill:#333;color:#333;}#mermaid-svg-8GBghgyUqGFLfRtZ .node rect,#mermaid-svg-8GBghgyUqGFLfRtZ .node circle,#mermaid-svg-8GBghgyUqGFLfRtZ .node ellipse,#mermaid-svg-8GBghgyUqGFLfRtZ .node polygon,#mermaid-svg-8GBghgyUqGFLfRtZ .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-8GBghgyUqGFLfRtZ .rough-node .label text,#mermaid-svg-8GBghgyUqGFLfRtZ .node .label text,#mermaid-svg-8GBghgyUqGFLfRtZ .image-shape .label,#mermaid-svg-8GBghgyUqGFLfRtZ .icon-shape .label{text-anchor:middle;}#mermaid-svg-8GBghgyUqGFLfRtZ .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-8GBghgyUqGFLfRtZ .rough-node .label,#mermaid-svg-8GBghgyUqGFLfRtZ .node .label,#mermaid-svg-8GBghgyUqGFLfRtZ .image-shape .label,#mermaid-svg-8GBghgyUqGFLfRtZ .icon-shape .label{text-align:center;}#mermaid-svg-8GBghgyUqGFLfRtZ .node.clickable{cursor:pointer;}#mermaid-svg-8GBghgyUqGFLfRtZ .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-8GBghgyUqGFLfRtZ .arrowheadPath{fill:#333333;}#mermaid-svg-8GBghgyUqGFLfRtZ .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-8GBghgyUqGFLfRtZ .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-8GBghgyUqGFLfRtZ .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-8GBghgyUqGFLfRtZ .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-8GBghgyUqGFLfRtZ .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-8GBghgyUqGFLfRtZ .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-8GBghgyUqGFLfRtZ .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-8GBghgyUqGFLfRtZ .cluster text{fill:#333;}#mermaid-svg-8GBghgyUqGFLfRtZ .cluster span{color:#333;}#mermaid-svg-8GBghgyUqGFLfRtZ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-8GBghgyUqGFLfRtZ .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-8GBghgyUqGFLfRtZ rect.text{fill:none;stroke-width:0;}#mermaid-svg-8GBghgyUqGFLfRtZ .icon-shape,#mermaid-svg-8GBghgyUqGFLfRtZ .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-8GBghgyUqGFLfRtZ .icon-shape p,#mermaid-svg-8GBghgyUqGFLfRtZ .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-8GBghgyUqGFLfRtZ .icon-shape .label rect,#mermaid-svg-8GBghgyUqGFLfRtZ .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-8GBghgyUqGFLfRtZ .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-8GBghgyUqGFLfRtZ .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-8GBghgyUqGFLfRtZ :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 偶然内聚
逻辑内聚
时间内聚
过程内聚
通信内聚
顺序内聚
功能内聚
最弱
最强
📊 四、模块的耦合性
(一)耦合性的定义
耦合性(Coupling)衡量模块之间相互依赖的程度。
耦合性概念:
#mermaid-svg-7f2owYRd9IjbB8fV{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-7f2owYRd9IjbB8fV .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-7f2owYRd9IjbB8fV .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-7f2owYRd9IjbB8fV .error-icon{fill:#552222;}#mermaid-svg-7f2owYRd9IjbB8fV .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-7f2owYRd9IjbB8fV .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-7f2owYRd9IjbB8fV .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-7f2owYRd9IjbB8fV .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-7f2owYRd9IjbB8fV .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-7f2owYRd9IjbB8fV .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-7f2owYRd9IjbB8fV .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-7f2owYRd9IjbB8fV .marker{fill:#333333;stroke:#333333;}#mermaid-svg-7f2owYRd9IjbB8fV .marker.cross{stroke:#333333;}#mermaid-svg-7f2owYRd9IjbB8fV svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-7f2owYRd9IjbB8fV p{margin:0;}#mermaid-svg-7f2owYRd9IjbB8fV .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-7f2owYRd9IjbB8fV .cluster-label text{fill:#333;}#mermaid-svg-7f2owYRd9IjbB8fV .cluster-label span{color:#333;}#mermaid-svg-7f2owYRd9IjbB8fV .cluster-label span p{background-color:transparent;}#mermaid-svg-7f2owYRd9IjbB8fV .label text,#mermaid-svg-7f2owYRd9IjbB8fV span{fill:#333;color:#333;}#mermaid-svg-7f2owYRd9IjbB8fV .node rect,#mermaid-svg-7f2owYRd9IjbB8fV .node circle,#mermaid-svg-7f2owYRd9IjbB8fV .node ellipse,#mermaid-svg-7f2owYRd9IjbB8fV .node polygon,#mermaid-svg-7f2owYRd9IjbB8fV .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-7f2owYRd9IjbB8fV .rough-node .label text,#mermaid-svg-7f2owYRd9IjbB8fV .node .label text,#mermaid-svg-7f2owYRd9IjbB8fV .image-shape .label,#mermaid-svg-7f2owYRd9IjbB8fV .icon-shape .label{text-anchor:middle;}#mermaid-svg-7f2owYRd9IjbB8fV .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-7f2owYRd9IjbB8fV .rough-node .label,#mermaid-svg-7f2owYRd9IjbB8fV .node .label,#mermaid-svg-7f2owYRd9IjbB8fV .image-shape .label,#mermaid-svg-7f2owYRd9IjbB8fV .icon-shape .label{text-align:center;}#mermaid-svg-7f2owYRd9IjbB8fV .node.clickable{cursor:pointer;}#mermaid-svg-7f2owYRd9IjbB8fV .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-7f2owYRd9IjbB8fV .arrowheadPath{fill:#333333;}#mermaid-svg-7f2owYRd9IjbB8fV .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-7f2owYRd9IjbB8fV .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-7f2owYRd9IjbB8fV .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-7f2owYRd9IjbB8fV .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-7f2owYRd9IjbB8fV .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-7f2owYRd9IjbB8fV .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-7f2owYRd9IjbB8fV .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-7f2owYRd9IjbB8fV .cluster text{fill:#333;}#mermaid-svg-7f2owYRd9IjbB8fV .cluster span{color:#333;}#mermaid-svg-7f2owYRd9IjbB8fV div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-7f2owYRd9IjbB8fV .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-7f2owYRd9IjbB8fV rect.text{fill:none;stroke-width:0;}#mermaid-svg-7f2owYRd9IjbB8fV .icon-shape,#mermaid-svg-7f2owYRd9IjbB8fV .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-7f2owYRd9IjbB8fV .icon-shape p,#mermaid-svg-7f2owYRd9IjbB8fV .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-7f2owYRd9IjbB8fV .icon-shape .label rect,#mermaid-svg-7f2owYRd9IjbB8fV .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-7f2owYRd9IjbB8fV .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-7f2owYRd9IjbB8fV .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-7f2owYRd9IjbB8fV :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 耦合性
模块之间
相互依赖程度
高耦合
低耦合
依赖紧密
依赖松散
(二)耦合性类型
耦合性类型:
| 耦合类型 | 说明 | 强度 | 示例 |
|---|---|---|---|
| 内容耦合 | 直接访问另一模块内部 | 最强 | 跳转到另一模块内部 |
| 公共耦合 | 通过公共数据区交互 | 强 | 共享全局变量 |
| 外部耦合 | 共享外部环境 | 较强 | 共享外部文件 |
| 控制耦合 | 传递控制信息 | 中等 | 传递标志位 |
| 标记耦合 | 传递数据结构 | 较弱 | 传递结构体 |
| 数据耦合 | 传递数据参数 | 最弱 | 传递简单参数 |
| 无直接耦合 | 无直接关系 | 无 | 独立模块 |
(三)耦合性示例
内容耦合示例:
模块A:
goto 模块B的内部标签
数据耦合示例:
模块A:
调用 模块B(参数1, 参数2)
(四)耦合性比较
耦合性比较:
#mermaid-svg-kRmK1FDQJP4JF0nn{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-kRmK1FDQJP4JF0nn .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-kRmK1FDQJP4JF0nn .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-kRmK1FDQJP4JF0nn .error-icon{fill:#552222;}#mermaid-svg-kRmK1FDQJP4JF0nn .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-kRmK1FDQJP4JF0nn .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-kRmK1FDQJP4JF0nn .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-kRmK1FDQJP4JF0nn .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-kRmK1FDQJP4JF0nn .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-kRmK1FDQJP4JF0nn .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-kRmK1FDQJP4JF0nn .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-kRmK1FDQJP4JF0nn .marker{fill:#333333;stroke:#333333;}#mermaid-svg-kRmK1FDQJP4JF0nn .marker.cross{stroke:#333333;}#mermaid-svg-kRmK1FDQJP4JF0nn svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-kRmK1FDQJP4JF0nn p{margin:0;}#mermaid-svg-kRmK1FDQJP4JF0nn .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-kRmK1FDQJP4JF0nn .cluster-label text{fill:#333;}#mermaid-svg-kRmK1FDQJP4JF0nn .cluster-label span{color:#333;}#mermaid-svg-kRmK1FDQJP4JF0nn .cluster-label span p{background-color:transparent;}#mermaid-svg-kRmK1FDQJP4JF0nn .label text,#mermaid-svg-kRmK1FDQJP4JF0nn span{fill:#333;color:#333;}#mermaid-svg-kRmK1FDQJP4JF0nn .node rect,#mermaid-svg-kRmK1FDQJP4JF0nn .node circle,#mermaid-svg-kRmK1FDQJP4JF0nn .node ellipse,#mermaid-svg-kRmK1FDQJP4JF0nn .node polygon,#mermaid-svg-kRmK1FDQJP4JF0nn .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-kRmK1FDQJP4JF0nn .rough-node .label text,#mermaid-svg-kRmK1FDQJP4JF0nn .node .label text,#mermaid-svg-kRmK1FDQJP4JF0nn .image-shape .label,#mermaid-svg-kRmK1FDQJP4JF0nn .icon-shape .label{text-anchor:middle;}#mermaid-svg-kRmK1FDQJP4JF0nn .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-kRmK1FDQJP4JF0nn .rough-node .label,#mermaid-svg-kRmK1FDQJP4JF0nn .node .label,#mermaid-svg-kRmK1FDQJP4JF0nn .image-shape .label,#mermaid-svg-kRmK1FDQJP4JF0nn .icon-shape .label{text-align:center;}#mermaid-svg-kRmK1FDQJP4JF0nn .node.clickable{cursor:pointer;}#mermaid-svg-kRmK1FDQJP4JF0nn .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-kRmK1FDQJP4JF0nn .arrowheadPath{fill:#333333;}#mermaid-svg-kRmK1FDQJP4JF0nn .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-kRmK1FDQJP4JF0nn .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-kRmK1FDQJP4JF0nn .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-kRmK1FDQJP4JF0nn .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-kRmK1FDQJP4JF0nn .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-kRmK1FDQJP4JF0nn .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-kRmK1FDQJP4JF0nn .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-kRmK1FDQJP4JF0nn .cluster text{fill:#333;}#mermaid-svg-kRmK1FDQJP4JF0nn .cluster span{color:#333;}#mermaid-svg-kRmK1FDQJP4JF0nn div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-kRmK1FDQJP4JF0nn .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-kRmK1FDQJP4JF0nn rect.text{fill:none;stroke-width:0;}#mermaid-svg-kRmK1FDQJP4JF0nn .icon-shape,#mermaid-svg-kRmK1FDQJP4JF0nn .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-kRmK1FDQJP4JF0nn .icon-shape p,#mermaid-svg-kRmK1FDQJP4JF0nn .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-kRmK1FDQJP4JF0nn .icon-shape .label rect,#mermaid-svg-kRmK1FDQJP4JF0nn .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-kRmK1FDQJP4JF0nn .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-kRmK1FDQJP4JF0nn .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-kRmK1FDQJP4JF0nn :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 内容耦合
公共耦合
外部耦合
控制耦合
标记耦合
数据耦合
无直接耦合
最强
无耦合
💡 五、模块独立性
(一)模块独立性的定义
模块独立性是指模块完成独立功能,与其他模块接口简单。
模块独立性概念:
#mermaid-svg-oBz9v4csfVIHItbc{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-oBz9v4csfVIHItbc .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-oBz9v4csfVIHItbc .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-oBz9v4csfVIHItbc .error-icon{fill:#552222;}#mermaid-svg-oBz9v4csfVIHItbc .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-oBz9v4csfVIHItbc .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-oBz9v4csfVIHItbc .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-oBz9v4csfVIHItbc .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-oBz9v4csfVIHItbc .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-oBz9v4csfVIHItbc .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-oBz9v4csfVIHItbc .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-oBz9v4csfVIHItbc .marker{fill:#333333;stroke:#333333;}#mermaid-svg-oBz9v4csfVIHItbc .marker.cross{stroke:#333333;}#mermaid-svg-oBz9v4csfVIHItbc svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-oBz9v4csfVIHItbc p{margin:0;}#mermaid-svg-oBz9v4csfVIHItbc .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-oBz9v4csfVIHItbc .cluster-label text{fill:#333;}#mermaid-svg-oBz9v4csfVIHItbc .cluster-label span{color:#333;}#mermaid-svg-oBz9v4csfVIHItbc .cluster-label span p{background-color:transparent;}#mermaid-svg-oBz9v4csfVIHItbc .label text,#mermaid-svg-oBz9v4csfVIHItbc span{fill:#333;color:#333;}#mermaid-svg-oBz9v4csfVIHItbc .node rect,#mermaid-svg-oBz9v4csfVIHItbc .node circle,#mermaid-svg-oBz9v4csfVIHItbc .node ellipse,#mermaid-svg-oBz9v4csfVIHItbc .node polygon,#mermaid-svg-oBz9v4csfVIHItbc .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-oBz9v4csfVIHItbc .rough-node .label text,#mermaid-svg-oBz9v4csfVIHItbc .node .label text,#mermaid-svg-oBz9v4csfVIHItbc .image-shape .label,#mermaid-svg-oBz9v4csfVIHItbc .icon-shape .label{text-anchor:middle;}#mermaid-svg-oBz9v4csfVIHItbc .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-oBz9v4csfVIHItbc .rough-node .label,#mermaid-svg-oBz9v4csfVIHItbc .node .label,#mermaid-svg-oBz9v4csfVIHItbc .image-shape .label,#mermaid-svg-oBz9v4csfVIHItbc .icon-shape .label{text-align:center;}#mermaid-svg-oBz9v4csfVIHItbc .node.clickable{cursor:pointer;}#mermaid-svg-oBz9v4csfVIHItbc .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-oBz9v4csfVIHItbc .arrowheadPath{fill:#333333;}#mermaid-svg-oBz9v4csfVIHItbc .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-oBz9v4csfVIHItbc .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-oBz9v4csfVIHItbc .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-oBz9v4csfVIHItbc .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-oBz9v4csfVIHItbc .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-oBz9v4csfVIHItbc .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-oBz9v4csfVIHItbc .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-oBz9v4csfVIHItbc .cluster text{fill:#333;}#mermaid-svg-oBz9v4csfVIHItbc .cluster span{color:#333;}#mermaid-svg-oBz9v4csfVIHItbc div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-oBz9v4csfVIHItbc .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-oBz9v4csfVIHItbc rect.text{fill:none;stroke-width:0;}#mermaid-svg-oBz9v4csfVIHItbc .icon-shape,#mermaid-svg-oBz9v4csfVIHItbc .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-oBz9v4csfVIHItbc .icon-shape p,#mermaid-svg-oBz9v4csfVIHItbc .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-oBz9v4csfVIHItbc .icon-shape .label rect,#mermaid-svg-oBz9v4csfVIHItbc .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-oBz9v4csfVIHItbc .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-oBz9v4csfVIHItbc .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-oBz9v4csfVIHItbc :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 模块独立性
高内聚
低耦合
模块内部紧密
模块间依赖少
模块独立
(二)模块独立性度量
度量指标:
| 指标 | 说明 | 目标 |
|---|---|---|
| 内聚性 | 模块内部关联程度 | 高内聚 |
| 耦合性 | 模块间依赖程度 | 低耦合 |
(三)提高模块独立性
提高方法:
| 方法 | 说明 |
|---|---|
| 提高内聚性 | 使模块功能单一 |
| 降低耦合性 | 减少模块间依赖 |
| 信息隐藏 | 隐藏模块内部细节 |
| 接口简化 | 简化模块接口 |
📋 六、模块的分解方法
(一)功能分解
功能分解:
#mermaid-svg-RhTttAweHULDxrvn{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-RhTttAweHULDxrvn .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-RhTttAweHULDxrvn .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-RhTttAweHULDxrvn .error-icon{fill:#552222;}#mermaid-svg-RhTttAweHULDxrvn .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-RhTttAweHULDxrvn .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-RhTttAweHULDxrvn .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-RhTttAweHULDxrvn .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-RhTttAweHULDxrvn .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-RhTttAweHULDxrvn .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-RhTttAweHULDxrvn .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-RhTttAweHULDxrvn .marker{fill:#333333;stroke:#333333;}#mermaid-svg-RhTttAweHULDxrvn .marker.cross{stroke:#333333;}#mermaid-svg-RhTttAweHULDxrvn svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-RhTttAweHULDxrvn p{margin:0;}#mermaid-svg-RhTttAweHULDxrvn .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-RhTttAweHULDxrvn .cluster-label text{fill:#333;}#mermaid-svg-RhTttAweHULDxrvn .cluster-label span{color:#333;}#mermaid-svg-RhTttAweHULDxrvn .cluster-label span p{background-color:transparent;}#mermaid-svg-RhTttAweHULDxrvn .label text,#mermaid-svg-RhTttAweHULDxrvn span{fill:#333;color:#333;}#mermaid-svg-RhTttAweHULDxrvn .node rect,#mermaid-svg-RhTttAweHULDxrvn .node circle,#mermaid-svg-RhTttAweHULDxrvn .node ellipse,#mermaid-svg-RhTttAweHULDxrvn .node polygon,#mermaid-svg-RhTttAweHULDxrvn .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-RhTttAweHULDxrvn .rough-node .label text,#mermaid-svg-RhTttAweHULDxrvn .node .label text,#mermaid-svg-RhTttAweHULDxrvn .image-shape .label,#mermaid-svg-RhTttAweHULDxrvn .icon-shape .label{text-anchor:middle;}#mermaid-svg-RhTttAweHULDxrvn .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-RhTttAweHULDxrvn .rough-node .label,#mermaid-svg-RhTttAweHULDxrvn .node .label,#mermaid-svg-RhTttAweHULDxrvn .image-shape .label,#mermaid-svg-RhTttAweHULDxrvn .icon-shape .label{text-align:center;}#mermaid-svg-RhTttAweHULDxrvn .node.clickable{cursor:pointer;}#mermaid-svg-RhTttAweHULDxrvn .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-RhTttAweHULDxrvn .arrowheadPath{fill:#333333;}#mermaid-svg-RhTttAweHULDxrvn .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-RhTttAweHULDxrvn .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-RhTttAweHULDxrvn .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-RhTttAweHULDxrvn .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-RhTttAweHULDxrvn .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-RhTttAweHULDxrvn .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-RhTttAweHULDxrvn .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-RhTttAweHULDxrvn .cluster text{fill:#333;}#mermaid-svg-RhTttAweHULDxrvn .cluster span{color:#333;}#mermaid-svg-RhTttAweHULDxrvn div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-RhTttAweHULDxrvn .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-RhTttAweHULDxrvn rect.text{fill:none;stroke-width:0;}#mermaid-svg-RhTttAweHULDxrvn .icon-shape,#mermaid-svg-RhTttAweHULDxrvn .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-RhTttAweHULDxrvn .icon-shape p,#mermaid-svg-RhTttAweHULDxrvn .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-RhTttAweHULDxrvn .icon-shape .label rect,#mermaid-svg-RhTttAweHULDxrvn .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-RhTttAweHULDxrvn .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-RhTttAweHULDxrvn .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-RhTttAweHULDxrvn :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 系统功能
子功能1
子功能2
子功能3
功能1.1
功能1.2
功能2.1
功能2.2
功能3.1
功能3.2
(二)数据流分解
数据流分解:
#mermaid-svg-E0oNWVFJqwgZFxhZ{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-E0oNWVFJqwgZFxhZ .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-E0oNWVFJqwgZFxhZ .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-E0oNWVFJqwgZFxhZ .error-icon{fill:#552222;}#mermaid-svg-E0oNWVFJqwgZFxhZ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-E0oNWVFJqwgZFxhZ .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-E0oNWVFJqwgZFxhZ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-E0oNWVFJqwgZFxhZ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-E0oNWVFJqwgZFxhZ .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-E0oNWVFJqwgZFxhZ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-E0oNWVFJqwgZFxhZ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-E0oNWVFJqwgZFxhZ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-E0oNWVFJqwgZFxhZ .marker.cross{stroke:#333333;}#mermaid-svg-E0oNWVFJqwgZFxhZ svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-E0oNWVFJqwgZFxhZ p{margin:0;}#mermaid-svg-E0oNWVFJqwgZFxhZ .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-E0oNWVFJqwgZFxhZ .cluster-label text{fill:#333;}#mermaid-svg-E0oNWVFJqwgZFxhZ .cluster-label span{color:#333;}#mermaid-svg-E0oNWVFJqwgZFxhZ .cluster-label span p{background-color:transparent;}#mermaid-svg-E0oNWVFJqwgZFxhZ .label text,#mermaid-svg-E0oNWVFJqwgZFxhZ span{fill:#333;color:#333;}#mermaid-svg-E0oNWVFJqwgZFxhZ .node rect,#mermaid-svg-E0oNWVFJqwgZFxhZ .node circle,#mermaid-svg-E0oNWVFJqwgZFxhZ .node ellipse,#mermaid-svg-E0oNWVFJqwgZFxhZ .node polygon,#mermaid-svg-E0oNWVFJqwgZFxhZ .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-E0oNWVFJqwgZFxhZ .rough-node .label text,#mermaid-svg-E0oNWVFJqwgZFxhZ .node .label text,#mermaid-svg-E0oNWVFJqwgZFxhZ .image-shape .label,#mermaid-svg-E0oNWVFJqwgZFxhZ .icon-shape .label{text-anchor:middle;}#mermaid-svg-E0oNWVFJqwgZFxhZ .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-E0oNWVFJqwgZFxhZ .rough-node .label,#mermaid-svg-E0oNWVFJqwgZFxhZ .node .label,#mermaid-svg-E0oNWVFJqwgZFxhZ .image-shape .label,#mermaid-svg-E0oNWVFJqwgZFxhZ .icon-shape .label{text-align:center;}#mermaid-svg-E0oNWVFJqwgZFxhZ .node.clickable{cursor:pointer;}#mermaid-svg-E0oNWVFJqwgZFxhZ .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-E0oNWVFJqwgZFxhZ .arrowheadPath{fill:#333333;}#mermaid-svg-E0oNWVFJqwgZFxhZ .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-E0oNWVFJqwgZFxhZ .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-E0oNWVFJqwgZFxhZ .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-E0oNWVFJqwgZFxhZ .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-E0oNWVFJqwgZFxhZ .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-E0oNWVFJqwgZFxhZ .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-E0oNWVFJqwgZFxhZ .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-E0oNWVFJqwgZFxhZ .cluster text{fill:#333;}#mermaid-svg-E0oNWVFJqwgZFxhZ .cluster span{color:#333;}#mermaid-svg-E0oNWVFJqwgZFxhZ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-E0oNWVFJqwgZFxhZ .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-E0oNWVFJqwgZFxhZ rect.text{fill:none;stroke-width:0;}#mermaid-svg-E0oNWVFJqwgZFxhZ .icon-shape,#mermaid-svg-E0oNWVFJqwgZFxhZ .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-E0oNWVFJqwgZFxhZ .icon-shape p,#mermaid-svg-E0oNWVFJqwgZFxhZ .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-E0oNWVFJqwgZFxhZ .icon-shape .label rect,#mermaid-svg-E0oNWVFJqwgZFxhZ .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-E0oNWVFJqwgZFxhZ .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-E0oNWVFJqwgZFxhZ .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-E0oNWVFJqwgZFxhZ :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 输入数据
处理1
处理2
处理3
输出数据
(三)事务分解
事务分解:
#mermaid-svg-1VFg1rK1s5zKCssm{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-1VFg1rK1s5zKCssm .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-1VFg1rK1s5zKCssm .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-1VFg1rK1s5zKCssm .error-icon{fill:#552222;}#mermaid-svg-1VFg1rK1s5zKCssm .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-1VFg1rK1s5zKCssm .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-1VFg1rK1s5zKCssm .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-1VFg1rK1s5zKCssm .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-1VFg1rK1s5zKCssm .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-1VFg1rK1s5zKCssm .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-1VFg1rK1s5zKCssm .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-1VFg1rK1s5zKCssm .marker{fill:#333333;stroke:#333333;}#mermaid-svg-1VFg1rK1s5zKCssm .marker.cross{stroke:#333333;}#mermaid-svg-1VFg1rK1s5zKCssm svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-1VFg1rK1s5zKCssm p{margin:0;}#mermaid-svg-1VFg1rK1s5zKCssm .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-1VFg1rK1s5zKCssm .cluster-label text{fill:#333;}#mermaid-svg-1VFg1rK1s5zKCssm .cluster-label span{color:#333;}#mermaid-svg-1VFg1rK1s5zKCssm .cluster-label span p{background-color:transparent;}#mermaid-svg-1VFg1rK1s5zKCssm .label text,#mermaid-svg-1VFg1rK1s5zKCssm span{fill:#333;color:#333;}#mermaid-svg-1VFg1rK1s5zKCssm .node rect,#mermaid-svg-1VFg1rK1s5zKCssm .node circle,#mermaid-svg-1VFg1rK1s5zKCssm .node ellipse,#mermaid-svg-1VFg1rK1s5zKCssm .node polygon,#mermaid-svg-1VFg1rK1s5zKCssm .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-1VFg1rK1s5zKCssm .rough-node .label text,#mermaid-svg-1VFg1rK1s5zKCssm .node .label text,#mermaid-svg-1VFg1rK1s5zKCssm .image-shape .label,#mermaid-svg-1VFg1rK1s5zKCssm .icon-shape .label{text-anchor:middle;}#mermaid-svg-1VFg1rK1s5zKCssm .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-1VFg1rK1s5zKCssm .rough-node .label,#mermaid-svg-1VFg1rK1s5zKCssm .node .label,#mermaid-svg-1VFg1rK1s5zKCssm .image-shape .label,#mermaid-svg-1VFg1rK1s5zKCssm .icon-shape .label{text-align:center;}#mermaid-svg-1VFg1rK1s5zKCssm .node.clickable{cursor:pointer;}#mermaid-svg-1VFg1rK1s5zKCssm .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-1VFg1rK1s5zKCssm .arrowheadPath{fill:#333333;}#mermaid-svg-1VFg1rK1s5zKCssm .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-1VFg1rK1s5zKCssm .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-1VFg1rK1s5zKCssm .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-1VFg1rK1s5zKCssm .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-1VFg1rK1s5zKCssm .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-1VFg1rK1s5zKCssm .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-1VFg1rK1s5zKCssm .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-1VFg1rK1s5zKCssm .cluster text{fill:#333;}#mermaid-svg-1VFg1rK1s5zKCssm .cluster span{color:#333;}#mermaid-svg-1VFg1rK1s5zKCssm div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-1VFg1rK1s5zKCssm .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-1VFg1rK1s5zKCssm rect.text{fill:none;stroke-width:0;}#mermaid-svg-1VFg1rK1s5zKCssm .icon-shape,#mermaid-svg-1VFg1rK1s5zKCssm .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-1VFg1rK1s5zKCssm .icon-shape p,#mermaid-svg-1VFg1rK1s5zKCssm .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-1VFg1rK1s5zKCssm .icon-shape .label rect,#mermaid-svg-1VFg1rK1s5zKCssm .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-1VFg1rK1s5zKCssm .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-1VFg1rK1s5zKCssm .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-1VFg1rK1s5zKCssm :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 类型1
类型2
类型3
事务
事务类型
处理1
处理2
处理3
📝 七、模块化设计方法
(一)自顶向下设计
自顶向下设计:
#mermaid-svg-DAf9F0Bb1VdQ6uzt{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-DAf9F0Bb1VdQ6uzt .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .error-icon{fill:#552222;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .marker{fill:#333333;stroke:#333333;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .marker.cross{stroke:#333333;}#mermaid-svg-DAf9F0Bb1VdQ6uzt svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-DAf9F0Bb1VdQ6uzt p{margin:0;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .cluster-label text{fill:#333;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .cluster-label span{color:#333;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .cluster-label span p{background-color:transparent;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .label text,#mermaid-svg-DAf9F0Bb1VdQ6uzt span{fill:#333;color:#333;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .node rect,#mermaid-svg-DAf9F0Bb1VdQ6uzt .node circle,#mermaid-svg-DAf9F0Bb1VdQ6uzt .node ellipse,#mermaid-svg-DAf9F0Bb1VdQ6uzt .node polygon,#mermaid-svg-DAf9F0Bb1VdQ6uzt .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .rough-node .label text,#mermaid-svg-DAf9F0Bb1VdQ6uzt .node .label text,#mermaid-svg-DAf9F0Bb1VdQ6uzt .image-shape .label,#mermaid-svg-DAf9F0Bb1VdQ6uzt .icon-shape .label{text-anchor:middle;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .rough-node .label,#mermaid-svg-DAf9F0Bb1VdQ6uzt .node .label,#mermaid-svg-DAf9F0Bb1VdQ6uzt .image-shape .label,#mermaid-svg-DAf9F0Bb1VdQ6uzt .icon-shape .label{text-align:center;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .node.clickable{cursor:pointer;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .arrowheadPath{fill:#333333;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-DAf9F0Bb1VdQ6uzt .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-DAf9F0Bb1VdQ6uzt .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-DAf9F0Bb1VdQ6uzt .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .cluster text{fill:#333;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .cluster span{color:#333;}#mermaid-svg-DAf9F0Bb1VdQ6uzt div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-DAf9F0Bb1VdQ6uzt rect.text{fill:none;stroke-width:0;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .icon-shape,#mermaid-svg-DAf9F0Bb1VdQ6uzt .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .icon-shape p,#mermaid-svg-DAf9F0Bb1VdQ6uzt .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .icon-shape .label rect,#mermaid-svg-DAf9F0Bb1VdQ6uzt .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-DAf9F0Bb1VdQ6uzt .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-DAf9F0Bb1VdQ6uzt .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-DAf9F0Bb1VdQ6uzt :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 系统
子系统1
子系统2
模块1.1
模块1.2
模块2.1
模块2.2
(二)逐步求精
逐步求精:
#mermaid-svg-hJXchT2MelJyhH2a{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-hJXchT2MelJyhH2a .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-hJXchT2MelJyhH2a .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-hJXchT2MelJyhH2a .error-icon{fill:#552222;}#mermaid-svg-hJXchT2MelJyhH2a .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-hJXchT2MelJyhH2a .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-hJXchT2MelJyhH2a .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-hJXchT2MelJyhH2a .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-hJXchT2MelJyhH2a .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-hJXchT2MelJyhH2a .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-hJXchT2MelJyhH2a .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-hJXchT2MelJyhH2a .marker{fill:#333333;stroke:#333333;}#mermaid-svg-hJXchT2MelJyhH2a .marker.cross{stroke:#333333;}#mermaid-svg-hJXchT2MelJyhH2a svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-hJXchT2MelJyhH2a p{margin:0;}#mermaid-svg-hJXchT2MelJyhH2a .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-hJXchT2MelJyhH2a .cluster-label text{fill:#333;}#mermaid-svg-hJXchT2MelJyhH2a .cluster-label span{color:#333;}#mermaid-svg-hJXchT2MelJyhH2a .cluster-label span p{background-color:transparent;}#mermaid-svg-hJXchT2MelJyhH2a .label text,#mermaid-svg-hJXchT2MelJyhH2a span{fill:#333;color:#333;}#mermaid-svg-hJXchT2MelJyhH2a .node rect,#mermaid-svg-hJXchT2MelJyhH2a .node circle,#mermaid-svg-hJXchT2MelJyhH2a .node ellipse,#mermaid-svg-hJXchT2MelJyhH2a .node polygon,#mermaid-svg-hJXchT2MelJyhH2a .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-hJXchT2MelJyhH2a .rough-node .label text,#mermaid-svg-hJXchT2MelJyhH2a .node .label text,#mermaid-svg-hJXchT2MelJyhH2a .image-shape .label,#mermaid-svg-hJXchT2MelJyhH2a .icon-shape .label{text-anchor:middle;}#mermaid-svg-hJXchT2MelJyhH2a .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-hJXchT2MelJyhH2a .rough-node .label,#mermaid-svg-hJXchT2MelJyhH2a .node .label,#mermaid-svg-hJXchT2MelJyhH2a .image-shape .label,#mermaid-svg-hJXchT2MelJyhH2a .icon-shape .label{text-align:center;}#mermaid-svg-hJXchT2MelJyhH2a .node.clickable{cursor:pointer;}#mermaid-svg-hJXchT2MelJyhH2a .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-hJXchT2MelJyhH2a .arrowheadPath{fill:#333333;}#mermaid-svg-hJXchT2MelJyhH2a .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-hJXchT2MelJyhH2a .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-hJXchT2MelJyhH2a .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-hJXchT2MelJyhH2a .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-hJXchT2MelJyhH2a .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-hJXchT2MelJyhH2a .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-hJXchT2MelJyhH2a .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-hJXchT2MelJyhH2a .cluster text{fill:#333;}#mermaid-svg-hJXchT2MelJyhH2a .cluster span{color:#333;}#mermaid-svg-hJXchT2MelJyhH2a div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-hJXchT2MelJyhH2a .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-hJXchT2MelJyhH2a rect.text{fill:none;stroke-width:0;}#mermaid-svg-hJXchT2MelJyhH2a .icon-shape,#mermaid-svg-hJXchT2MelJyhH2a .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-hJXchT2MelJyhH2a .icon-shape p,#mermaid-svg-hJXchT2MelJyhH2a .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-hJXchT2MelJyhH2a .icon-shape .label rect,#mermaid-svg-hJXchT2MelJyhH2a .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-hJXchT2MelJyhH2a .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-hJXchT2MelJyhH2a .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-hJXchT2MelJyhH2a :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 抽象描述
第一层细化
第二层细化
第三层细化
具体实现
(三)模块化设计步骤
设计步骤:
| 步骤 | 任务 | 产出 |
|---|---|---|
| 1. 需求分析 | 分析系统需求 | 需求规格 |
| 2. 功能分解 | 分解系统功能 | 功能树 |
| 3. 模块划分 | 划分模块 | 模块列表 |
| 4. 接口设计 | 设计模块接口 | 接口规格 |
| 5. 模块设计 | 设计模块内部 | 模块设计 |
| 6. 评审优化 | 评审和优化 | 优化设计 |
📊 八、模块化设计实例
(一)实例背景
项目:学生成绩管理系统
系统功能:
- 学生信息管理
- 课程信息管理
- 成绩管理
- 统计分析
(二)模块划分
模块结构图:
#mermaid-svg-JG5eGbdm66xU2hdf{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-JG5eGbdm66xU2hdf .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-JG5eGbdm66xU2hdf .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-JG5eGbdm66xU2hdf .error-icon{fill:#552222;}#mermaid-svg-JG5eGbdm66xU2hdf .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-JG5eGbdm66xU2hdf .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-JG5eGbdm66xU2hdf .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-JG5eGbdm66xU2hdf .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-JG5eGbdm66xU2hdf .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-JG5eGbdm66xU2hdf .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-JG5eGbdm66xU2hdf .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-JG5eGbdm66xU2hdf .marker{fill:#333333;stroke:#333333;}#mermaid-svg-JG5eGbdm66xU2hdf .marker.cross{stroke:#333333;}#mermaid-svg-JG5eGbdm66xU2hdf svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-JG5eGbdm66xU2hdf p{margin:0;}#mermaid-svg-JG5eGbdm66xU2hdf .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-JG5eGbdm66xU2hdf .cluster-label text{fill:#333;}#mermaid-svg-JG5eGbdm66xU2hdf .cluster-label span{color:#333;}#mermaid-svg-JG5eGbdm66xU2hdf .cluster-label span p{background-color:transparent;}#mermaid-svg-JG5eGbdm66xU2hdf .label text,#mermaid-svg-JG5eGbdm66xU2hdf span{fill:#333;color:#333;}#mermaid-svg-JG5eGbdm66xU2hdf .node rect,#mermaid-svg-JG5eGbdm66xU2hdf .node circle,#mermaid-svg-JG5eGbdm66xU2hdf .node ellipse,#mermaid-svg-JG5eGbdm66xU2hdf .node polygon,#mermaid-svg-JG5eGbdm66xU2hdf .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-JG5eGbdm66xU2hdf .rough-node .label text,#mermaid-svg-JG5eGbdm66xU2hdf .node .label text,#mermaid-svg-JG5eGbdm66xU2hdf .image-shape .label,#mermaid-svg-JG5eGbdm66xU2hdf .icon-shape .label{text-anchor:middle;}#mermaid-svg-JG5eGbdm66xU2hdf .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-JG5eGbdm66xU2hdf .rough-node .label,#mermaid-svg-JG5eGbdm66xU2hdf .node .label,#mermaid-svg-JG5eGbdm66xU2hdf .image-shape .label,#mermaid-svg-JG5eGbdm66xU2hdf .icon-shape .label{text-align:center;}#mermaid-svg-JG5eGbdm66xU2hdf .node.clickable{cursor:pointer;}#mermaid-svg-JG5eGbdm66xU2hdf .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-JG5eGbdm66xU2hdf .arrowheadPath{fill:#333333;}#mermaid-svg-JG5eGbdm66xU2hdf .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-JG5eGbdm66xU2hdf .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-JG5eGbdm66xU2hdf .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-JG5eGbdm66xU2hdf .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-JG5eGbdm66xU2hdf .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-JG5eGbdm66xU2hdf .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-JG5eGbdm66xU2hdf .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-JG5eGbdm66xU2hdf .cluster text{fill:#333;}#mermaid-svg-JG5eGbdm66xU2hdf .cluster span{color:#333;}#mermaid-svg-JG5eGbdm66xU2hdf div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-JG5eGbdm66xU2hdf .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-JG5eGbdm66xU2hdf rect.text{fill:none;stroke-width:0;}#mermaid-svg-JG5eGbdm66xU2hdf .icon-shape,#mermaid-svg-JG5eGbdm66xU2hdf .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-JG5eGbdm66xU2hdf .icon-shape p,#mermaid-svg-JG5eGbdm66xU2hdf .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-JG5eGbdm66xU2hdf .icon-shape .label rect,#mermaid-svg-JG5eGbdm66xU2hdf .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-JG5eGbdm66xU2hdf .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-JG5eGbdm66xU2hdf .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-JG5eGbdm66xU2hdf :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 学生成绩管理系统
学生管理模块
课程管理模块
成绩管理模块
统计分析模块
学生信息录入
学生信息查询
学生信息修改
学生信息删除
课程信息录入
课程信息查询
课程信息修改
成绩录入
成绩查询
成绩修改
成绩统计
成绩分析
报表生成
(三)模块设计
学生管理模块设计:
| 子模块 | 功能 | 输入 | 输出 |
|---|---|---|---|
| 学生信息录入 | 录入学生信息 | 学生信息 | 录入结果 |
| 学生信息查询 | 查询学生信息 | 查询条件 | 学生信息 |
| 学生信息修改 | 修改学生信息 | 修改信息 | 修改结果 |
| 学生信息删除 | 删除学生信息 | 学生ID | 删除结果 |
(四)接口设计
接口设计示例:
接口名称:addStudent
功能描述:添加学生信息
输入参数:
- studentId: String, 学生ID
- name: String, 姓名
- age: Integer, 年龄
- major: String, 专业
输出参数:
- result: Boolean, 操作结果
- message: String, 操作消息
📝 总结
模块化是软件设计的核心思想,是构建高质量软件系统的基础。
🎯 模块化定义:将复杂系统分解为相对独立的、具有特定功能的模块。模块具有功能明确、边界清晰、相对独立、可替换、可复用等特征。
📦 设计原则:模块化------将系统分解为模块;抽象------抽取本质特征;信息隐藏------隐藏模块内部细节;高内聚------模块内部元素紧密相关;低耦合------模块间依赖关系简单。
🌐 内聚性:从低到高分为偶然内聚、逻辑内聚、时间内聚、过程内聚、通信内聚、顺序内聚、功能内聚。追求功能内聚,避免偶然内聚。
💡 耦合性:从强到弱分为内容耦合、公共耦合、外部耦合、控制耦合、标记耦合、数据耦合、无直接耦合。追求数据耦合,避免内容耦合。
📋 设计方法:自顶向下设计、逐步求精、功能分解、数据流分解、事务分解。
核心启示:模块化是软件设计的基石,"分而治之"是解决复杂问题的有效策略。良好的模块化设计能够显著提高软件的可维护性、可理解性、可测试性和可复用性。在实际工作中,我们需要注意:第一,遵循高内聚低耦合的原则,这是模块化设计的核心;第二,模块功能要单一,一个模块只做一件事;第三,模块接口要简单,减少模块间的依赖;第四,重视信息隐藏,保护模块内部实现;第五,模块大小要适中,既不要太大也不要太小。模块化设计是一项需要经验和技巧的工作,需要设计师具备良好的抽象能力和分解能力。通过合理的模块化设计,我们可以将复杂的软件系统分解为可管理的模块,从而提高软件质量和开发效率。