de_DEen_USes_ESfa_IRfr_FRid_IDjapl_PLpt_PTru_RUvizh_CNzh_TW

📘 数据流图自顶向下分解完全指南

1. 数据流图(DFD)简介

一个数据流图(DFD)是一种以图形方式表示数据如何在系统中的流动——展示数据的来源、转换方式、存储位置以及最终去向。与流程图(侧重于控制流和顺序)不同,数据流图强调数据的移动与转换而无需考虑执行时机或顺序。

Visual Paradigm AI 聊天机器人:使用 AI 理解用于自顶向下分解的数据流图(DFD)

为何使用数据流图?

  • 分析 分析现有系统或 设计 一个新系统
  • 尽早识别数据输入、输出和存储
  • 向利益相关者传达系统边界和数据需求
  • 从鸟瞰视角将复杂性分解至实现细节

2. 数据流图的四个核心组件

任何层级的数据流图均由以下 四个 基本元素构成(Gane-Sarson 符号):

组件 符号 角色 示例
外部实体 矩形 数据的来源或目的地外部系统边界之外 客户、支付网关
处理过程 圆形 将输入数据转换为输出数据 “下订单”、“授权支付”
数据存储 记录 / 开放矩形 用于后续使用的数据存储位置 订单、产品库存
数据流 箭头(带标签) 上述内容之间的数据流动 “订单详情”、“支付状态”

💡 关键规则:一个过程必须同时具有输入流和输出流。仅具有输入或仅具有输出的过程属于建模错误——每个转换都会产生结果。


3. 数据流图层级——自顶向下金字塔

自顶向下分解的精髓在于你从抽象开始 并添加 细节 迭代进行。每个级别都遵循标准的编号约定:

级别 名称 内容
0 级 上下文图 单个过程(整个系统)、所有外部实体及其数据流——无数据存储,无内部细节
1 级 系统数据流图 系统分解为主要过程(1.0、2.0、3.0…)、内部数据存储和数据流
2 级 子图 单个 1 级过程分解为更细粒度的过程(2.1、2.2、2.3…)
第 3 层 子子图 单个第 2 层过程进一步分解(2.2.1、2.2.2、2.2.3…)

编号精确地告诉你在层次结构中的位置——2.2.4 属于 2.2,该属于 2.0。这种树形结构使大型系统易于导航。


4. 公司风格(颜色图例)

本指南中的每张图表均遵循统一的视觉规范。在 Graphviz 中,方法是:先设置样式,再声明元素,最后进行连接。

元素 形状 填充 边框 目的
外部实体 框 #E1F5FE #0288D1 谁在外部
过程 圆形 #E8F5E9 #388E3C 什么转换数据
数据存储 记录 #FFF9C4 #FBC02D 数据所在之处
父进程(引用) 圆形 #FCE4EC #C2185B 当前层级之外的上下文
系统边界 虚线,圆角集群 #FAFAFA / #757575 灰色 当前图表的边界
数据流 箭头 — #555555 数据移动

⚠️ 重要提示——样式模板不是图表

一个仅定义节点/边样式但从不声明任何节点或边的 Graphviz 文件将渲染为空白画布。数据流图(DFD)需要三个要素:

  1. 为图表设置样式 — graph [...], 节点 [...], 边 [...]属性。
  2. 声明元素——外部实体(方框)、处理过程(圆圈)、数据存储(记录),包裹在虚线簇边界。
  3. 绘制流程——显式A -> B [label="..."]边,使用dir=both用于双向交换。

比较这两项 — 两者 验证通过,但只有第二项能生成图片:

❌ 仅样式(无法渲染):

digraph DFD {
    graph [rankdir = LR]
    node [shape = box, style = "filled", fillcolor = "#E1F5FE"]
    edge [color = "#555555", arrowsize = 0.8]
}

✅ 完整(可渲染):

digraph DFD {
    graph [rankdir = LR]
    node [style = "filled", fillcolor = "#E1F5FE", shape = box]
    Customer;
    // ...加上处理过程、数据存储、边界和边
}


5. 该自顶向下分解过程(逐步进行)

该在线订单处理系统展示了该方法论。在每一层级,您都将获得完整且可运行的 Graphviz 代码。

步骤 1 — 构建上下文图(第 0 层)

将整个系统视为一个单一的处理过程并识别与外部世界的所有交互。不包含数据存储,也不包含内部细节。

Visual Paradigm AI 聊天机器人:构建用于自顶向下分解的上下文图(第 0 层)示例

digraph DFD {
    // --- 图形样式与图表标题 ---
    graph [
        rankdir = LR
        splines = true
        overlap = false
        nodesep = 0.6
        ranksep = 0.9
        fontname = "Helvetica,Arial,sans-serif"
        fontsize = 12
        label = "在线订单处理系统 - 上下文(第 0 层)"
    ]
    node [ fontname = "Helvetica,Arial,sans-serif", fontsize = 11, penwidth = 1.5 ]
    edge [ fontname = "Helvetica,Arial,sans-serif", fontsize = 9,
           color = "#555555", arrowsize = 0.8 ]

    // 外部实体
    node [shape = box, style = "filled", fillcolor = "#E1F5FE", color = "#0288D1"]
    Customer; PaymentGateway; Warehouse; Courier;

    // 单一系统处理过程
    node [shape = circle, style = "filled", fillcolor = "#E8F5E9",
          color = "#388E3C", fixedsize = true, width = 1.6]
    System [label="0.0n在线订单n处理系统"];

    // 数据流(双向交换数据时使用双向箭头)
    Customer -> System [label="订单与n账户"];
    System -> Customer [label="确认与n收据"];
    System -> PaymentGateway [label="支付n请求"];
    PaymentGateway -> System [label="支付n状态"];
    Warehouse -> System [label="库存n可用"];
    System -> Courier [label="配送n请求", dir=both];
}

解读:上下文图回答了“该系统的边界是什么,它与谁交互?”——它展示了外部实体及其数据流,但隐藏了所有内部结构。我们看到系统从客户接收订单,并通过支付网关,将库存与仓库,并将履约任务移交至快递员.


步骤 2 — 分解为一级(主要流程)

Visual Paradigm AI 聊天机器人:使用 AI 将自顶向下分解过程分解为第 1 层(主要过程)

将单一上下文流程分解为关键功能,并添加共享数据存储。将流程与存储用虚线圆角系统边界.

digraph DFD {
    // --- 图形样式与图表标题 ---
    graph [
        rankdir = LR
        splines = true
        overlap = false
        nodesep = 0.5
        ranksep = 0.8
        fontname = "Helvetica,Arial,sans-serif"
        fontsize = 12
        label = "在线订单处理系统 - 一级"
    ]
    node [ fontname = "Helvetica,Arial,sans-serif", fontsize = 11, penwidth = 1.5 ]
    edge [ fontname = "Helvetica,Arial,sans-serif", fontsize = 9,
           color = "#555555", arrowsize = 0.8 ]

    // 外部实体
    node [shape = box, style = "filled", fillcolor = "#E1F5FE", color = "#0288D1"]
    Customer; PaymentGateway; Warehouse; Courier;

    // --- 系统边界容器 ---
    subgraph cluster_SystemBoundary {
        label = "在线订单处理系统";
        fontname = "Helvetica,Arial,sans-serif"
        fontsize = 14
        color = "#757575"
        style = "dashed,rounded"
        bgcolor = "#FAFAFA"
        margin = 20

        // 处理过程(绿色圆形)
        node [shape = circle, style = "filled", fillcolor = "#E8F5E9",
              color = "#388E3C", fixedsize = true, width = 1.3]
        P1 [label="1.0n下n订单"];
        P2 [label="2.0n处理n支付"];
        P3 [label="3.0n确认n库存"];
        P4 [label="4.0n发n货"];

        // 数据存储(黄色记录)
        node [shape = record, style = "filled", fillcolor = "#FFF9C4",
              color = "#FBC02D", fixedsize = false]
        OrderDS    [label="{ D1 | 订单 }"];
        ProductDS  [label="{ D2 | 产品n库存 }"];
        ShippingDS [label="{ D3 | 发货 }"];
    }

    // --- 数据流:外部实体 ---
    Customer -> P1 [label="订单及n账户详情"];
    P1 -> Customer [label="订单n确认"];
    P2 -> PaymentGateway [label="支付n请求"];
    PaymentGateway -> P2 [label="支付n状态"];
    Warehouse -> P3 [label="库存n可用"];
    Courier -> P4 [label="配送n状态", dir=both];

    // --- 处理过程间流水线 ---
    P1 -> P2 [label="订单n总额"];
    P2 -> P3 [label="已支付n订单"];
    P3 -> P4 [label="已验证n订单"];

    // --- 处理过程与数据存储之间 ---
    P1 -> OrderDS [label="创建n订单"];                     // 仅写
    P3 -> ProductDS [label="更新n库存", dir=both];         // 读与写
    P4 -> ShippingDS [label="创建n发货"];               // 仅写
    OrderDS -> P3 [label="订单n详情"];                    // 仅读
    ShippingDS -> P4 [label="发货n标签"];                // 仅读
}

图表即代码:VPasCode 用于第 1 层数据流图(DFD)的自顶向下分解解释:

  • 线性链P1 → P2 → P3 → P4 表示一个有序流水线:订单在下达后才会进行支付,支付完成后才会检查库存,库存确认后才发货。
  • 该支付网关 交互使用两个单向箭头(支付请求 向外,支付状态向内)。
  • 数据存储充当状态:P1 写入订单,P3 读取并更新库存(dir=both), P4 写入发货单。
  • P3 → ProductDS 使用 dir=both — 一条边,而非两条 — 因为该流程既读取又更新库存。

步骤 3 — 下钻:二级(专注于一个流程)

Visual Paradigm AI 聊天机器人:使用 AI 将自顶向下分解示例分解为第 1 层(主要过程)

选择一个一级流程并进行分解仅该流程。显示父流程在边界处(粉色),以便保留上下文,同时显示子流程、子存储和流程。

digraph DFD {
    // --- 图形样式与图表标题 ---
    graph [
        rankdir = LR
        splines = true
        overlap = false
        nodesep = 0.5
        ranksep = 0.8
        fontname = "Helvetica,Arial,sans-serif"
        fontsize = 12
        label = "支付流程(第 2 层)- 在线订单处理系统"
    ]
    node [ fontname = "Helvetica,Arial,sans-serif", fontsize = 11, penwidth = 1.5 ]
    edge [ fontname = "Helvetica,Arial,sans-serif", fontsize = 9,
           color = "#555555", arrowsize = 0.8 ]

    // 外部实体
    node [shape = box, style = "filled", fillcolor = "#E1F5FE", color = "#0288D1"]
    Customer; PaymentGateway;

    // --- 系统边界(此子流程)---
    subgraph cluster_SystemBoundary {
        label = "2.0 支付流程";
        fontname = "Helvetica,Arial,sans-serif"
        fontsize = 14
        color = "#757575"
        style = "dashed,rounded"
        bgcolor = "#FAFAFA"
        margin = 20

        // 子流程(绿色圆形)
        node [shape = circle, style = "filled", fillcolor = "#E8F5E9",
              color = "#388E3C", fixedsize = true, width = 1.3]
        P21 [label="2.1n计算n总额"];
        P22 [label="2.2n验证n支付"];
        P23 [label="2.3n授权n支付"];
        P24 [label="2.4n确认n订单"];

        // 子数据存储(黄色记录)
        node [shape = record, style = "filled", fillcolor = "#FFF9C4",
              color = "#FBC02D", fixedsize = false]
        CartDS   [label="{ D1 | 购物车/n订单项 }"];
        PromoDS  [label="{ D2 | 促销活动 }"];
        PaymentDS [label="{ D3 | 支付n交易 }"];
        OrderDS  [label="{ D4 | 订单 }"];

        // 父流程(粉色)- 来自更高层级的上下文
        node [shape = circle, style = "filled", fillcolor = "#FCE4EC",
              color = "#C2185B", fixedsize = true, width = 1.4]
        P1 [label="1.0n下订单n(父级)"];
        P3 [label="3.0n确认库存n(父级)"];
    }

    // 来自父级/客户流向子流程
    P1 -> P21 [label="订单项"];
    P1 -> P22 [label="支付方式"];
    Customer -> P22 [label="支付详情"];

    // 子流程链
    P21 -> P22 [label="总额与n折扣"];
    P22 -> P23 [label="已验证n支付"];
    P23 -> P24 [label="支付n已授权"];

    // 与外部网关的交互
    P23 -> PaymentGateway [label="授权n请求"];
    PaymentGateway -> P23 [label="批准/n拒绝"];

    // 输出至父级/客户
    P24 -> P3 [label="已支付n订单"];
    P24 -> Customer [label="支付n收据"];

    // 数据存储访问
    P21 -> CartDS [label="读取n项", dir=both];
    P22 -> PromoDS [label="验证n促销"];
    P23 -> PaymentDS [label="记录n交易", dir=both];
    P24 -> OrderDS [label="更新n状态"];
}

使用 VPasCode 的图表即代码:将数据流图(DFD)分解为第 1 层(主要过程)并渲染解释(与“第 1 层):

  • 2.1 计算总额是一个纯计算——读取购物车项,生成数值,除存储外无外部输入/输出。
  • 2.3 授权支付是唯一步骤,与外部支付网关——资金流动被清晰地隔离。
  • 该订单存储再次出现,因为2.4更新订单状态(最初由1.0在一级。)
  • 该链2.1 → 2.2 → 2.3 → 2.4是顺序验证管道在移交给3.0(粉色父级)。
  • 父进程 1.0 和 3.0 被绘制为粉红色 外部 边界以锚定流程的起点和终点。

步骤 4 — 再次下钻:第三级(递归重复)

Visual Paradigm AI 聊天机器人:再次下钻:使用 AI 的自顶向下分解第 3 层(递归重复)示例

对任何仍然过于复杂的子进程重复完全相同的技术。我们放大到2.2 验证支付.

digraph DFD {
    // --- 图形样式与图表标题 ---
    graph [
        rankdir = LR
        splines = true
        overlap = false
        nodesep = 0.5
        ranksep = 0.8
        fontname = "Helvetica,Arial,sans-serif"
        fontsize = 12
        label = "验证支付(第三级)- 在线订单处理系统"
    ]
    node [ fontname = "Helvetica,Arial,sans-serif", fontsize = 11, penwidth = 1.5 ]
    edge [ fontname = "Helvetica,Arial,sans-serif", fontsize = 9,
           color = "#555555", arrowsize = 0.8 ]

    // 外部实体
    node [shape = box, style = "filled", fillcolor = "#E1F5FE", color = "#0288D1"]
    Customer;

    // --- 系统边界(此叶级子进程)---
    subgraph cluster_SystemBoundary {
        label = "2.2 验证支付";
        fontname = "Helvetica,Arial,sans-serif"
        fontsize = 14
        color = "#757575"
        style = "dashed,rounded"
        bgcolor = "#FAFAFA"
        margin = 20

        // 叶级进程(绿色圆圈)
        node [shape = circle, style = "filled", fillcolor = "#E8F5E9",
              color = "#388E3C", fixedsize = true, width = 1.3]
        P221 [label="2.2.1n验证n卡/支付n详情"];
        P222 [label="2.2.2n检查n欺诈"];
        P223 [label="2.2.3n验证n促销n代码"];
        P224 [label="2.2.4n计算n最终n金额"];

        // 叶级数据存储(黄色记录)
        node [shape = record, style = "filled", fillcolor = "#FFF9C4",
              color = "#FBC02D", fixedsize = false]
        CardDS  [label="{ D1 | 卡n注册表 }"];
        FraudDS [label="{ D2 | 欺诈n规则 }"];
        PromoDS [label="{ D3 | 促销活动 }"];
        CartDS  [label="{ D4 | 购物车/n订单项 }"];

        // 父进程(粉红色)
        node [shape = circle, style = "filled", fillcolor = "#FCE4EC",
              color = "#C2185B", fixedsize = true, width = 1.4]
        P21 [label="2.1n计算n总计n(父进程)"];
        P23 [label="2.3n授权n支付n(父进程)"];
    }

    // 输入
    P21 -> P221 [label="总计 &n日期"];
    Customer -> P221 [label="支付n详情"];

    // 顺序验证,含并行分支
    P221 -> P222 [label="已验证n详情"];
    P222 -> P223 [label="无欺诈n标志n(并行)"];

    // 为最终计算提供输入
    P21 -> P223 [label="促销n代码"];
    P221 -> P224 [label="支付n总计"];
    P223 -> P224 [label="已应用n折扣"];

    // 输出至父进程
    P224 -> P23 [label="已验证且n已折扣n总计"];

    // 数据存储访问
    P221 -> CardDS [label="验证n卡"];
    P222 -> FraudDS [label="检查n规则"];
    P223 -> PromoDS [label="查找n& 应用"];
    P224 -> CartDS [label="读取n项", dir=both];
}

使用 VPasCode 的图表即代码:再次下钻:用于渲染的第 3 层(递归重复)示例解释:

  • 2.2.1 验证卡片是关卡——它必须在欺诈检查开始前成功。
  • 2.2.2(欺诈)和2.2.3(促销)在并行:两者都读取规则并都参与最终计算。“(并行)”标签即表示此情况。
  • 2.2.4 计算最终金额是扇入点 — 它连接 支付总额 + 折扣合并为一个验证后的输出并传递给父级2.3.
  • 卡注册表和欺诈规则是细节级存储,在第二层不可见——随着分解的进行,新的存储会自然出现。

步骤 5 — 当流程为“基本”时停止

继续分解,直到每个流程描述一个单一、明确、可执行的操作. 没有固定的深度;当流程能清晰地映射到一个功能或一个决策时即停止。上述 2.2.1 至 2.2.4 层级已经是基本层级。


6. 最佳实践与常见陷阱

✅ 最佳实践

  1. 对流程进行分层编号 (2.2.4) 以便任何图表都能在树结构中自我定位。
  2. 在边界处绘制父级流程(粉色)以便流程保留上下文——切勿使输入/输出成为孤立项。
  3. 使用一条双向边 (dir=both) 用于双向交换,而非两条独立的箭头。可减少杂乱。
  4. 保持标签描述性强但简短(“授权支付”,而非”AP”)。
  5. 一次分解一个过程— 每一层级都是独立的图表;切勿将多个层级塞入同一张图中。
  6. 平衡图表— 父级层的输入/输出必须等于其子级层输入/输出的总和(平衡规则)。
  7. 始终声明元素— 仅包含样式声明而未定义任何节点或边的模板将渲染出空白画布。每张数据流图(DFD)都必须先设置样式,再声明元素,最后进行连接.
  8. 唯一命名数据存储— 在子图中使用,但需重新进行本地编号(如 D1、D2…)以实现自包含。

❌ 常见陷阱

  1. 孤立过程— 指没有输入或输出的过程。每个过程都必须对某些内容进行转换。
  2. 缺失平衡— 在一级图中出现了数据流,但其二级子图中没有任何节点产生或消耗该流。
  3. 过早细化— 在零级上下文图中暴露数据存储(它们仅应出现在更低层级)。
  4. 控制流思维— 将循环或决策符号放入数据流图;此类内容应保留给流程图。数据流图展示的是数据,而非顺序。
  5. 两条平行箭头 本应是一条dir=both 边——造成重复线条的杂乱。
  6. 数据存储访问方向错误— 将数据存储标记为只读 而实际上它被写入(或反之)。
  7. 将样式模板误认为图表— 忘记声明节点和边会导致生成空白图。

7. 自上而下验证检查清单

在展示图表之前,请检查:

  • ✅ 每个过程至少有一个输入和一个输出。
  • ✅ 每个数据流标签都是名词(如“订单详情”),而不是动词。
  • ✅ 每个数据存储都曾被读取和写入过(除非是明确的外部参考数据)。
  • ✅ 层级边界平衡:子层级消耗和产生的内容必须与其父层级交换的内容完全一致。
  • ✅ 外部实体仅出现在边界边缘,绝不出现在边界内部。
  • ✅ dir=both用于双向交换;否则使用单向箭头。
  • ✅ 粉色父进程引用正确显示了正在分解的层级。
  • ✅ 该代码声明了真实的节点、边和边界——它不仅仅是一条样式规则。

8. 自顶向下分解过程总结

自顶向下 DFD 分解是从抽象到细节的旅程:

  • 上下文(L0)——一个框,包含所有边界和外部实体。
  • 系统(L1)——主要进程、存储和数据流水线。
  • 子图(L2、L3…)——递归地一次聚焦一个进程,同时保持父上下文可见,并对本地存储进行编号。

每一层级回答不同的问题:L0 询问“系统的范围是什么?”,L1 询问“主要的数据流是什么?”,L2+ 询问“这些数据究竟是如何被转换的?”

该在线订单流程示例展示了完整的链条,包含完整且可运行的 Graphviz 代码——从包含 4 个实体的上下文图,直至一个包含 4 个步骤的验证例程 (2.2.1 → 2.2.4)。通过归并数字, 平衡流程,并遵循一致的颜色图例(蓝色方框、绿色圆圈、黄色记录、粉色父级引用、灰色虚线边界),并且始终显式声明每个节点/边,任何大型系统都保持可导航且无歧义——并且每个图表都能实际渲染。

9. 工具:使用 Visual Paradigm AI 构建 DFD 自顶向下分解

Visual Paradigm AI将AI 聊天机器人直接集成到建模工具中。无需手动绘制每一层,你可以通过对话驱动整个分解过程,然后微调结果。以下是如何在本指南所述方法中具体使用它。

9.1 DFD 工作的核心功能

该VP AI 聊天机器人是一个文本与代码助手,通过对话与你协作。对于 DFD 自顶向下分解,它可以:

能力 它为您做什么
生成图表代码 为给定的过程描述生成 Graphviz (DOT) 代码——逐层生成
分析附加图像 读取您上传的手绘或现有 DFD 图像,并将其转换为结构化模型
迭代优化 根据您的反馈(例如“放大到 2.2″、“添加下降分支”)重新生成图表”
解释含义 逐一说明每个实体、过程、存储和流程的含义
验证语法 在渲染之前检查 DOT 代码的结构是否健全
生成策略/图表输出 生成与 DFD 配套的辅助图表或框架(例如泳道图或组织上下文图)

📌 注意:Visual Paradigm 支持多种绘图符号。建议优先使用BPMN进行需要开始/结束事件、网关和泳道的业务流程建模;使用基于 Graphviz 的数据流图(DFD)进行本指南中所示的严格数据流建模。


9.2 实战对话 —— 分解在线订单流程

以下是一个真实的聊天会话,它复现了我们逐步讲解的步骤。请注意,每个提示都会深入一个层级——这正是自顶向下的方法论。

提示 1 —— 启动上下文图:

“为在线订单处理系统创建一个上下文图(0 级)。外部实体:客户、支付网关、仓库、快递员。”

VP AI 响应生成一个 0 级数据流图(DFD)——包含一个中心处理过程、四个外部实体及其数据流——您将其绘制在图中。

提示 2 —— 增加详细层级:

“现在将其分解为 1 级数据流图,包含以下处理过程:1.0 下订单、2.0 处理支付、3.0 确认库存、4.0 发货。添加订单、产品库存和发货的数据存储。”

VP AI 返回带有按顺序链接的流程、附加的存储以及保留的外部实体流程的 1 级图——即您在指南第 2 步中看到的流水线。

提示 3——聚焦到一个流程:

“聚焦到 2.0 支付流程。创建一个 2 级子图,包含 2.1 计算总额、2.2 验证支付、2.3 授权支付、2.4 确认订单。保留 1.0 和 3.0 作为父级引用。”

VP AI 生成2 级子图:子流程、本地存储(D1–D4)、支付网关交互,以及 1.0 和 3.0 的粉色父级引用——与第 3 步一致。

提示 4——再次下钻:

“将 2.2 验证支付下钻为 3 级图:2.2.1 验证卡片、2.2.2 检查欺诈、2.2.3 验证促销、2.2.4 计算最终金额。添加卡片注册、欺诈规则、促销和购物车项的存储。”

VP AI 生成3 级叶图,包含扇入计算(2.2.4)以及并行的欺诈/促销分支——完全符合第 4 步。

提示 5——添加异常处理:

“添加失败路径:如果 2.2.2 检查欺诈标记了该交易,则路由到取消通知流程并返回给顾客。”

VP AI 优化该图,添加拒绝分支并自动重新平衡流程。


9.3 有效的提示模式

使用这些模式以获得可靠且符合方法论的结果:

目标 示例提示
向下一层分解 “放大至3.0 确认库存作为二级子图。”
指定编号 “使用带编号的流程2.1, 2.2, 2.3.”
保留父级上下文 “保留 1.0 和 3.0 作为边界处的父引用。”
添加数据存储 “包含存储: D1 购物车项, D2 促销活动.”
显示双向流 “使用 dir=both 用于进程与存储之间的读写操作。”
平衡层级 “确保输入和输出与父层级相匹配。”
添加失败路径 “当支付被拒绝时.”
限制深度 “停留在基本过程——即单一、可执行的操作。”

9.4 上传图片进行分析

如果您已有手绘或遗留的数据流图(DFD)并希望将其数字化:

  1. 附加图像到聊天中(现有 DFD 的截图、照片或导出文件)。
  2. 提问:“分析此 DFD 图像,并将其转换为我可编辑的结构化模型。”
  3. VP AI 检查图像(读取形状、标签和箭头)并将实体、流程、存储和流重构为可编辑的图表。

📌 AI 读取图像的内容——矩形、圆形、记录及其标签——并以正确的符号表示法重现它们。这是从粗略草图到清晰分层模型的快速路径,随后可进一步分解该模型。


9.5 通过工件工作流进行迭代

VP AI将每个生成的图表存储为工件,供您在细化过程中引用:

  • “细化 Level-2 工件,以添加欺诈拒绝分支。”——针对特定已生成的图表,而非从头重新生成。
  • “重新生成上下文图,但移除仓库实体。”——当范围发生变化时替换工件。
  • “比较 Level-2 和 Level-3 工件以实现平衡。”——交叉检查父级/子级流程的一致性。

由于工件保留了对话状态,您可以在不丢失先前决策的情况下逐层进行细化——这正是自上而下分解的精髓。


9.6 推荐工作流程检查清单

阶段 操作
1. 脚手架 首先提示生成上下文图(Level 0)。
2. 建立 Level 1 请求包含数据存储和边界的重大过程分解。
3. 向下钻取 一次聚焦一个过程;保留父级引用。
4. 优化 请求异常路径、平衡修复方案并存储修正内容。
5. 验证 让 AI 检查 DOT 语法;并查阅第 7 节中的检查清单。
6. 文档化 请求为每个层级附上解释性叙述。

9.7 示例输出 — 请求 VP AI 生成第 1 级代码

聊天机器人针对“第 2 步分解”的典型响应将是“您之前看到的完整且可运行的 DOT 代码”:

在线订单处理系统第 1 层数据流图(DFD),展示客户、支付网关、仓库和快递之间的交互。

digraph DFD {
    graph [
        rankdir = LR, splines = true, overlap = false,
        nodesep = 0.5, ranksep = 0.8,
        fontname = "Helvetica,Arial,sans-serif", fontsize = 12,
        label = "在线订单处理系统 - 一级"
    ]
    node [ fontname = "Helvetica,Arial,sans-serif", fontsize = 11, penwidth = 1.5 ]
    edge [ fontname = "Helvetica,Arial,sans-serif", fontsize = 9,
           color = "#555555", arrowsize = 0.8 ]

    // 外部实体
    node [shape = box, style = "filled", fillcolor = "#E1F5FE", color = "#0288D1"]
    Customer; PaymentGateway; Warehouse; Courier;

    subgraph cluster_SystemBoundary {
        label = "在线订单处理系统";
        fontname = "Helvetica,Arial,sans-serif"
        fontsize = 14
        color = "#757575"
        style = "dashed,rounded"
        bgcolor = "#FAFAFA"
        margin = 20

        node [shape = circle, style = "filled", fillcolor = "#E8F5E9",
              color = "#388E3C", fixedsize = true, width = 1.3]
        P1 [label="1.0n下n单"];
        P2 [label="2.0n处理n支付"];
        P3 [label="3.0n确认n库存"];
        P4 [label="4.0n发n货"];

        node [shape = record, style = "filled", fillcolor = "#FFF9C4",
              color = "#FBC02D", fixedsize = false]
        OrderDS    [label="{ D1 | 订单 }"];
        ProductDS  [label="{ D2 | 产品n库存 }"];
        ShippingDS [label="{ D3 | 发货 }"];
    }

    // 数据流
    Customer -> P1 [label="订单 &n账户详情"];
    P1 -> Customer [label="订单n确认"];
    P2 -> PaymentGateway [label="支付n请求"];
    PaymentGateway -> P2 [label="支付n状态"];
    Warehouse -> P3 [label="库存n可用"];
    Courier -> P4 [label="配送n状态", dir=both];

    P1 -> P2 [label="订单n总额"];
    P2 -> P3 [label="已付n订单"];
    P3 -> P4 [label="已验证n订单"];

    P1 -> OrderDS [label="创建n订单"];
    P3 -> ProductDS [label="更新n库存", dir=both];
    P4 -> ShippingDS [label="创建n发货"];
    OrderDS -> P3 [label="订单n详情"];
    ShippingDS -> P4 [label="发货n标签"];
}

将其粘贴到 VP 图中,即可得到结构完整的一级模型——准备好在下一个提示中进行进一步分解。


10. 总结

自顶向下的 DFD 分解是一个从抽象到细节的旅程:

  • 上下文(L0)——一个框,包含所有边界和外部实体。
  • 系统(L1) — 主要流程、存储和数据管道。
  • 子图(L2、L3…) — 递归地一次聚焦一个流程,同时保持父级上下文可见,并对本地存储进行编号。

每一层级回答不同的问题:L0 询问“系统的范围是什么?”,L1 询问“主要的数据流有哪些?”,L2+ 询问“这些数据是如何具体转换的?”

借助Visual Paradigm AI,整个层级结构支持对话式交互:提示生成 L0 层级,要求对其进行分解,一次聚焦一个流程,请求异常分支,并上传图片以将现有图表数字化。结合严格的编号, 流量平衡、一致的颜色图例以及完整的先声明后连接代码,任何大型系统都能保持可导航、无歧义——并且每个图表都能实际渲染。🚀