☰
库存管理系统DFD数据流图建模与评审实战指南
2026/10/28 14:38:35 网站建设 项目流程

画库存系统的数据流图(DFD),最容易出问题的往往不是软件操作,而是第一步:把"库存"这件事拆成谁在动数据、数据存在哪、经过哪些加工。我见过不少需求文档,DFD 画得像模像样,方框箭头一应俱全,结果评审阶段被问"这张图的输入从哪来、输出给谁用"就卡住了。后来做详细设计,开发照着图去建表,才发现图里少了一个关键数据存储,补一次返工两周。库存管理系统数据流图建模这件事,说到底是把仓储业务里的实物流、单据流、账目流三者的映射关系用图形语言固定下来。它适合两类人看:一类是刚接手需求梳理、需要把业务流程翻译成系统语言的产品和需求分析人员;另一类是写代码前想先把数据走向想清楚的后端开发。这篇内容我会按实际建模顺序展开,从业务盘点、分层画图、命名规范到评审排错,把我踩过的坑和能直接抄的规则都写进去。

1. DFD 在库存系统里到底解决什么问题

1.1 一张画歪的 DFD,后面所有设计都要返工

我习惯把 DFD 理解成给系统拍一张"数据交通图"。图上的箭头代表数据往哪走,方框代表数据在哪儿停留,圆圈代表数据被加工成什么新形态。库存系统尤其吃这套方法,因为这个领域的核心不是页面长什么样,而是"一笔库存变动从哪来、经过谁的手、最后落在哪张表上"。举个最常见的场景:销售下一张出库单,系统要先判断可用库存够不够,够了就锁量,拣货完成才真正扣减。这条链路上,"可用库存 = 现有库存 - 锁定量 - 在途占用"这个计算发生在哪个加工里,结果写回哪个数据存储,如果不提前在图上定死,开发和测试对业务的理解就会分叉。

实际项目里返工成本最高的不是画图本身,而是图画错之后引发的连锁反应。表结构照着错图建,接口照着错图拆,等到联调时发现"盘点差异"这条数据流没有归宿,只能临时加一张差异调整表,前后端一起改。我做过的项目里,DFD 阶段每修正一个数据存储的归属,大概能省下后面三到五天的联调扯皮。所以这份投入非常划算,前提是别把它当成交差用的形式文档。

1.2 四种基本元素怎么对应到库存场景

DFD 只有四类符号,但套到具体业务上,很多人第一反应是"这个到底算外部实体还是算加工"。我把库存系统里最典型的映射关系整理成一张表,建模时可以直接对着填:

元素类型图形符号库存系统里的典型对象判断要点
外部实体矩形供应商、客户、仓库管理员、采购部门、财务部门、销售部门系统边界之外、不归你开发的人或系统
加工圆角矩形或圆形入库登记、可用库存校验、库存扣减、盘点差异处理、安全库存预警把输入数据变成输出数据的最小业务动作
数据存储开口矩形或双平行线商品主数据、库位表、库存台账、库存流水、单据明细需要持久化、会被多次读写的静态停留点
数据流带箭头连线入库单、出库申请、库存快照、预警清单、对账报表有明确名称、有方向、承载具体数据内容

判断外部实体有个很实用的口诀:你能给他发需求文档让他改系统的,就不是外部实体;你只能跟他约定接口格式的,就是外部实体。仓库管理员在你系统里登录操作,他算外部实体,因为人不是系统的一部分;但如果你们内部还有个独立的 WMS 系统负责货位管理,那它也是外部实体,两边只能靠接口通信。

1.3 DFD、流程图、ER 图的边界在哪里

新手最容易犯的错是把三种图画成一锅粥。我明确一下分工:流程图回答"先做什么后做什么",强调的是顺序和判断分支;ER 图回答"数据之间是什么关系",强调实体、属性和关联;DFD 回答"数据从哪来到哪去、被谁加工、停在哪",强调的是数据流向和变换。三者视角不同,谁也替代不了谁。

具体到库存系统,一张入库流程图会画出"扫描到货单 → 质检 → 上架 → 系统入账"这样的步骤序列,而 DFD 关心的是"到货单明细"这条数据流进入"入库登记"加工后,被拆成"库存台账更新"和"入库流水记录"两路输出,分别落到 D1 和 D4 两个数据存储。你在 DFD 上画判断菱形、画循环回退箭头,那就是把流程图混进来了,评审时会被直接打回。我自己的做法是:DFD 阶段坚决不画任何条件分支,所有分支逻辑都留到详细设计的流程描述里,这样图面干净,数据流向一目了然。

2. 建模前的业务盘点:先摸清数据从哪来

2.1 把库存业务拆成五个核心动作

动手画图之前,我会先拿一张白纸做业务盘点,把所有会引发库存数字变化或需要读取库存的动作列出来。库存系统看着复杂,核心动作其实就五个:收货入库、发货出库、仓间调拨、盘点调整、库存查询与预警。前四个是写操作,会改变库存台账;最后一个是读操作,只产生查询结果和预警清单。

这个盘点必须做到"动作 + 触发源 + 结果"三要素齐全。比如收货入库,触发源是采购部门下的采购订单和供应商送来的到货通知,结果是库存台账增加、库存流水新增一条、单据状态变更。我见过有人盘点时漏了"退货入库",结果系统上线后客户退回来的货没地方录,只能走盘盈,搞得账实差异分析完全失真。所以盘点清单最好按业务全生命周期过一遍:正常采购入库、采购退货出库、销售出库、销售退货入库、领用出库、调拨出入、盘盈盘亏,一个都不能少。

盘点完成后,我会把每个动作涉及的单据整理成一张清单,这张清单后面会直接变成数据流的名称来源。比如"采购入库"动作会涉及采购订单、到货单、质检单、入库单四类单据,它们在 DFD 上就是四条不同的数据流,绝对不能笼统地写成一条"入库数据"。粒度粗了,后面没法往下分解。

2.2 外部实体的识别与边界划定

划定系统边界这一步,直接决定了你的图能不能往下画。我的经验是先问三个问题:谁发起请求?谁接收结果?哪些数据是我们自己维护、哪些必须从别人那拿?答案落定,外部实体也就出来了。库存系统常见的边界外角色有这么几类:

  • 供应商:提供到货通知、送货单,接收采购退货指令
  • 客户或销售部门:发起出库申请,接收发货结果和库存可用性反馈
  • 仓库管理员:发起入库、出库、盘点操作,接收作业任务
  • 采购部门:发起采购订单和到货预约,接收入库差异报告
  • 财务部门:接收库存价值报表和出入库对账数据

这里有个细节值得强调:同一个角色在不同层级的图上只能出现一次,位置和名称必须保持一致。曾经有个项目,顶层图上叫"仓储部",0 层图上改叫"仓库管理员",评审时被问到这是一个人还是两个角色,场面很尴尬。统一命名的办法是建一张角色对照表,画图过程中随时对照,改一处必须全图同步。

另外要警惕把内部模块当成外部实体。比如安全库存预警,如果你把它画成外部实体的矩形,然后让它给系统发预警请求,那就错了——预警逻辑是你系统自己算的,它应该是一个加工。判断标准很简单:能被你写进代码里实现的,都不是外部实体。

2.3 数据存储的划分逻辑

数据存储是库存系统 DFD 里最容易画乱的部分。常见毛病是两个极端:一种是把所有表都塞进去,图上十几个数据存储,密密麻麻看不清;另一种是只画一个"数据库",等于什么都没说。我摸索出的划分标准是:按数据变化的频率和生命周期来分,能合并的合并,该独立的独立。

实际建模时我一般保留五到六个数据存储就够了:

数据存储编号名称存放内容变化特征
D1商品主数据SKU 编码、名称、规格、单位、默认库位低频变更,人工维护
D2库位与仓库档案仓库编码、库区、货架、容积限制低频变更,人工维护
D3库存台账当前库存量、锁定量、可用量、批次高频变更,每笔出入库都动
D4库存流水变动前后数量、单据号、操作人、时间戳只增不改,用于追溯
D5业务单据入库单、出库单、调拨单、盘点单及明细状态流转,有生命周期

D3 和 D4 分开是必须坚持的原则。库存台账是"现在的状态",库存流水是"过去发生过什么",两者用途完全不同。台账用来做可用量判断,流水用来做对账和审计。把两者合成一张表,短期内省事,长期一定出问题,因为流水表会无限增长,查询当前库存时不得不扫全表。这个设计取舍在 DFD 阶段就该定下来,否则开发按自己的理解实现,后面改起来成本极高。

3. 分层建模实战:从顶层图到一层图

3.1 顶层上下文图:画错一个箭头,后面全崩

顶层图也叫上下文图,整张图上只有一个加工,就是你的系统本身,周围一圈外部实体,中间用数据流连起来。这张图看着简单,实际上信息密度最高,因为它规定了系统对外的全部接口面。我画这张图时会严格遵循一个原则:只画一级数据流,不画任何内部细节,不画数据存储。

以库存管理系统为例,中心加工命名为"库存管理系统",四周环绕六个外部实体,数据流大致是这样:采购部门流出"采购订单与到货预约",供应商流入"到货通知与送货单",仓库管理员流入"出入库操作指令与盘点结果",销售部门流入"出库申请",系统向销售部门流出"库存可用性反馈与发货结果",向财务部门流出"库存价值报表与对账数据"。

这里有个特别容易踩的坑:很多人在顶层图上就把"库存台账"画成数据存储了。上下文图的规范是只体现系统与外部世界的交互,数据存储属于系统内部,不该出现。我早年画图被一位前辈指出来过,他说得很直白:"顶层图是给别人看你的系统跟外面怎么打交道的,不是让人参观你内部结构的。"从那以后我每次画完都会自查一遍,图里有没有出现任何内部元素。

还有一个数量控制经验:外部实体控制在四到七个之间比较合适。超过七个,说明系统边界划得太大,可能该拆成两个子系统;少于四个,通常说明漏了角色,比如忘了财务或者忘了查询类的使用方。

3.2 0 层图的粒度控制与加工编号

0 层图是把顶层图那个唯一的加工拆开,露出系统内部的主要功能块。这一步最考验功力,因为拆得太粗没价值,拆得太细又会导致后面层数太多、图画不完。我的经验值是0 层图拆出四到六个加工,正好覆盖库存系统的主要功能域。

一个典型的 0 层图拆法是这样的:加工 1 负责入库管理,加工 2 负责出库管理,加工 3 负责库存维护(含调拨和盘点),加工 4 负责库存查询与预警,加工 5 负责对账与报表。编号从 1 开始顺序编,注意编号一旦确定就不要随便改,因为后面一层图的子加工编号会跟着变成 1.1、1.2、2.1 这种形式,改动会引发全图重编号。

比编号更重要的是每个加工必须有输入也有输出。我在评审时有个固定检查动作:逐个加工看,输入箭头为零的叫"无源加工",输出箭头为零的叫"黑洞加工",两种都是硬伤。库存系统里最常出现的黑洞是"库存盘点处理"——有人画了盘点单进去,却忘了画差异调整结果出来。这种图交上去,懂行的人一眼就能看出你没想清楚盘点差异到底怎么落地。

还有一个粒度均衡问题。0 层图上,"入库管理"和"报表生成"这两个加工的复杂度显然不在一个量级,但如果你把入库拆成三个加工、报表只留一个,图面会显得很怪。我的处理办法是:按业务闭环划分,而不是按代码模块划分。入库是一条从单据接收到台账更新的完整闭环,报表是一条从数据汇总到输出的闭环,各自作为一个加工是合理的,往下展开时再按需细化。

3.3 一层图展开:入库、出库、盘点三条主线

一层图是对 0 层图里某个加工继续分解。库存系统真正需要画一层图的,通常是入库、出库和库存维护这三个。我拿出库管理举例,因为它涉及的判断最多,也最能说明问题。

加工 2"出库管理"往下拆,我一般拆成五个子加工:

  • 2.1 接收并校验出库申请:检查单据要素是否完整、SKU 是否存在、申请数量是否为正
  • 2.2 校验可用库存:读取库存台账,计算可用量,判断是否满足
  • 2.3 生成拣货任务:按库位和批次策略拆分任务,写回单据明细
  • 2.4 扣减库存并记录流水:更新台账的锁定量与实际量,向流水表写入变动记录
  • 2.5 回传出库结果:把成功或失败的结果返回给申请方

拆到这个粒度,每个加工做的事情都很清楚,开发拿着图就能对应到具体的服务方法。这里有个实操细节:2.2 和 2.4 是两个不同的时点,前者是校验、后者是执行。很多人在图上把这两步合并成一个"处理出库",结果实现时把校验和扣减写在一个事务里,遇到高并发就出现超卖。图上分开画,实际上是在提醒你这里存在时序差异,需要分开设计。

入库管理的一层图相对简单,通常是 1.1 接受到货通知、1.2 质检结果录入、1.3 分配库位、1.4 更新库存并写流水、1.5 回传入库完成。库存维护的一层图则会拆成调拨和盘点两条支线,盘点线里必须包含"差异计算"和"差异调整入账"两个独立加工,这是最容易被合并掉的关键环节。

3.4 父子图平衡检查的具体做法

平衡性检查是 DFD 建模里最硬性的规则,也是最容易出问题的地方。所谓平衡,指的是父图里某个加工的所有输入输出数据流,在展开后的子图里必须原样出现,一个不能多、一个不能少、名称不能变。这条规则听起来简单,实操中违反的概率极高。

我总结了一套三步检查法,每次画完一层图就走一遍:

第一步,把父图上被展开的那个加工的所有进出箭头抄在纸上,包括名称和方向。比如加工 2"出库管理",输入有"出库申请单"和"可用库存查询结果",输出有"拣货任务"和"出库结果"。

第二步,把子图当成一个黑盒,看它的所有输入是否正好等于父图的输入集合,输出是否正好等于父图的输出集合。如果子图多出了一条父图没有的输入,比如"库存策略配置",那父图上就必须补上这条流;如果少了一条,说明分解过程中把某个输入弄丢了。

第三步,逐个核对名称。这一步最琐碎但最必要,因为"出库申请"和"出库申请单"在图上就是两个不同的数据流,评审时一定被挑。

这套流程我坚持了很多年,能拦下八成以上的平衡性问题。剩下两成通常是跨层引用造成的,比如子图里直接读了父图上没体现的数据存储。处理办法是把这类读取行为统一收敛到一个明确的加工里,而不是让它散落在各个子加工中。

4. 命名规范与数据字典:让图能被人读懂

4.1 加工、数据流、数据存储的命名规则

图画得再规范,名字起得含糊也白搭。我给团队定的命名规则就三条,简单但管用。

加工用"动词 + 业务对象",比如"校验可用库存""登记入库单""计算盘点差异"。禁止出现"处理数据""业务逻辑""功能模块"这类没有信息量的名字。判断一个加工名字合不合格,就看能不能从中读出它的输入和输出大概是什么。如果读完名字你还不知道它干什么,就该改。

数据流用"名词 + 单据或信息",比如"入库单明细""库存快照""预警清单"。数据流名称必须是名词性短语,因为它承载的是数据本身。很多人习惯写"提交出库",这是动作,不是数据,应该改成"出库申请单"。

数据存储用纯名词,比如"库存台账""商品主数据""库位档案"。禁止用"表 1""数据库 A"这种代号,也禁止把技术实现细节写进去,比如"库存表(MySQL)"——DFD 是逻辑模型,不涉及物理实现。

还有一条隐规则:同一份数据在不同位置必须用同一个名字。库存系统里最典型的就是库存数量这个概念,有的地方叫"库存量",有的地方叫"现存量",还有叫"账面数"的,三种叫法在图上一出现,读者就会怀疑是不是三个不同的东西。我的做法是建模前先建一份术语表,把核心业务概念的中文名固定下来,画图全程只查表不自由发挥。

4.2 数据字典怎么写才不流于形式

DFD 配上数据字典才算完整,因为图上只能写数据流的名字,写不下它的具体构成。数据字典就是给每条数据流、每个数据存储做一份"成分说明",说清楚它由哪些数据项组成、每个数据项什么类型、取值范围是什么。

库存系统里,一条典型的数据字典条目长这样:

{ "条目名": "库存流水记录", "别名": "库存变动明细", "简述": "记录每一次库存数量变动的完整凭证", "组成": [ "流水号(唯一标识)", "SKU编码", "仓库编码 + 库位编码", "批次号(可空)", "变动类型(入库/出库/调拨入/调拨出/盘盈/盘亏)", "变动数量(正数表示增,负数表示减)", "变动前数量", "变动后数量", "关联单据号", "操作人", "操作时间戳" ], "数量": "每天约 2000 至 5000 条" }

这份字典看着琐碎,价值在于它能直接转化成建表语句和接口字段。我做过对比:有字典的项目,开发建表基本一次成型;没字典的项目,光字段对齐就要开两三次会。字典里最值得花时间的是"变动前数量"和"变动后数量"这两个字段,它们让流水具备自校验能力——任意时点把流水按顺序累加,结果必须等于台账当前值,对不上就说明有漏记或重复记。

写字典还有个技巧:优先写那些会被多个加工共享的数据流。像"库存台账"这种既被出库校验读、又被盘点调整写的存储,字段定义必须一次说清楚,否则读写双方理解不一致,问题会拖到测试阶段才暴露。

4.3 命名翻车现场实录

说几个我亲身遇到过、后来反复拿来当反面教材的例子。

第一个是"数据流画成双向箭头"。库存系统里"库存台账"和"库存扣减加工"之间,有人画了一条两头带箭头的线,意思是既读又写。这个画法在 DFD 里是不允许的,读和写必须拆成两条方向相反的数据流,分别命名。合并成一条双向线,等于放弃了方向信息,读者根本不知道数据是流进去还是流出来。

第二个是"加工命名带条件"。有人把加工命名为"库存不足时的处理",这就把判断逻辑塞进名字里了。加工应该描述它做什么,条件判断属于流程图的范畴。正确做法是命名为"校验可用库存",把不满足时的分支处理放到详细设计里描述。

第三个是"数据存储用动词"。见过一个图里数据存储叫"记录出库",这明显是把加工和数据存储搞混了。数据存储是静止的数据集合,只能是名词。

这三个问题有个共同点:都源于对元素类型的理解不清。我的建议是建模初期就拿一张纸,把四种符号各画一遍,旁边写上库存系统的实例,贴在显示器边上,画图时随时对照。这个笨办法见效最快。

5. 工具选型、版式规范与评审流程

5.1 工具选型的几个关键维度

DFD 建模工具的选择,说到底是看你在什么场景下用。我把常见方案按适用性排了一下,用表格对比更直观:

方案类型上手难度符号规范性协作能力适合场景
通用在线绘图工具低中,需自建图形库强,支持多人实时编辑需求讨论、快速出草图
专业建模套件高强,内置标准符号中,依赖文件传递需要交付正式建模文档
文本化绘图语言中,需记语法中,需自定义样式强,天然适合版本管理图形需频繁迭代、要进代码库
白板类协作工具极低弱,符号不标准极强头脑风暴、评审会现场讨论

我的实际做法是分阶段用不同工具:讨论阶段用白板类工具快速拉通,定稿阶段用专业工具或文本化方案出正式图。之所以强调区分,是因为白板工具画出来的图符号不标准,圆角矩形和矩形混用,拿去当正式文档会被质疑专业性;而专业工具在讨论阶段太重,改一个框要拖动半天,严重拖慢节奏。

还有个容易被忽略的维度是版本管理。DFD 是要迭代的,尤其是需求变更频繁的项目,一张图可能改十几版。如果工具只支持导出图片,那版本对比基本没法做。文本化方案的天然优势就在这,图的源码可以进版本库,每次改动都有 diff 记录,谁在什么时候加了哪个数据存储,一查便知。这是我后来倾向文本化方案的核心原因。

5.2 版式与连线规范

图的内容对了,排版乱了照样影响阅读。我给自己定的版式规则有这么几条,都是被评审挑出来的经验。

流向统一从左上到右下。外部实体放左侧或上方,加工放中间,数据存储放右侧或下方,整体形成一个从左到右的流动感。库存系统的出库链路,我会把销售部门放左上,出库相关加工横排中间,库存台账和流水表放右下,读者顺着看下来就是一条完整的数据路径。

尽量减少连线交叉。交叉线一多,图就没法看了。减少交叉的办法是调整节点位置,把交互频繁的加工和数据存储放近一些。如果实在避不开,就用跳线符号,或者在交叉点加一个小圆弧表示不相交。

加工编号写在框内左上角,字体小一号,和数据流名称区分开。编号的作用是让读者能顺着层级往里追,比如看到 2.4 就知道这是出库管理下的第四个子加工。

数据流名称沿箭头方向书写,不要压在线上。名称太长就换行,不要为了省地方缩写成看不懂的简称。

一张图别超过二十个节点。超过这个数,说明该往下分层了。我见过一张 0 层图塞了三十多个加工,作者自己都说不清某个连线从哪连到哪,这种图的存在意义基本为零。

5.3 评审流程与版本管理

DFD 评审不能只评一次,我一般安排三场,每场关注点不同。

第一场是边界评审,只评顶层上下文图。参会方是业务方和系统对接方,重点确认外部实体是否齐全、系统与其他系统的接口数据流是否遗漏。这场评审的核心问题是"这个数据是你们给我们,还是我们找你们要",把责任边界划清楚,后面才不会出现双方都以为对方在维护某份数据的情况。

第二场是分层与粒度评审,评 0 层图和一层图。参会方是开发和测试,重点是加工拆分是否合理、数据存储划分是否清晰。这场评审常见的分歧是粒度,业务方觉得拆得不够细,开发觉得拆得太细。我的处理原则是:能对应到独立服务方法的粒度就够了,再细就属于详细设计范畴。

第三场是平衡性与一致性评审,只做检查不做讨论。核对父子图数据流是否一致、命名是否统一、编号是否连续、数据字典是否覆盖全部数据流。这场可以自己做,用前面说的三步检查法走一遍。

版本管理上,我会给每版图打上版本号和日期,重大变更单独记一条变更说明,写清楚改了什么、为什么改。库存系统里最常见的变更是新增数据存储,比如业务方突然提出要支持批次管理,那就得加一个批次库存表,这时要连带检查所有相关加工的数据流是否需要调整。没有版本记录,这种连锁影响根本追不清楚。

6. 常见问题排查与后续衔接

6.1 典型错误速查表

画图过程中遇到的坑,大部分是重复的。我把它们整理成一张速查表,每次定稿前对着过一遍,能省下不少评审时间:

问题现象本质原因修正方法
加工只有输入没有输出没想清楚加工的产出物补上输出数据流,或合并该加工
加工只有输出没有输入数据凭空产生补上输入来源,通常是漏了数据存储
数据流直接连两个数据存储缺少中间加工补充执行数据变换的加工
两个外部实体直接连线越过了系统边界改为经过内部加工中转
数据流无名称或名称含糊建模者自己也没想清用"名词+单据/信息"重新命名
父子图数据流数量不一致分解时遗漏或擅自增加按三步检查法逐条核对
一层图里出现两层加工分层意识不清统一展开到同一深度
图里出现判断菱形或循环箭头混入流程图元素删除分支逻辑,留到详细设计
数据存储命名含技术细节混淆逻辑与物理模型改为纯业务名词

这张表里,我最常遇到的是前三条。尤其是"数据流直接连两个数据存储",看上去挺合理,实际上违反了 DFD 的基本前提——数据存储不会主动搬运数据,必须有人或加工作为搬运者。库存系统里"库存台账"到"库存流水"之间如果直接连线,就等于说台账自己会往流水里写记录,这在逻辑上说不通。

6.2 评审时最容易被追问的三个点

根据我的经验,评审会上被追问频率最高的三个问题,基本都指向同一件事:数据流的起点和终点是否真的存在。

第一个问题通常是"这条数据流是从哪个存储读出来的"。比如出库校验要用到可用库存,评审的人会问你,可用库存是从库存台账实时算的,还是从某个预计算表读的。如果你的图里只画了一条"可用库存"流出来,却没说清它的来源,那这个加工就没法实现。解决办法是把来源存储明确画出来,并在数据字典里写清计算口径。

第二个问题是"这个加工失败之后,数据流到哪里去了"。DFD 本身不表达异常流,但评审时一定会被问到,因为库存系统里失败场景太常见了:库存不足、库位锁定、单据重复提交。我一般会在图外加一份异常流清单,注明每条主流程在异常情况下的处理路径,作为图的补充说明。

第三个问题是"这条数据流的触发条件是什么"。比如"库存预警清单"什么时候生成,是定时任务还是每次库存变动后触发。DFD 不表达时序,但实现时必须明确。我的做法是在数据字典里给这类周期性数据流标注生成频率,比如"每日凌晨生成一次",避免开发各自理解。

6.3 从 DFD 到详细设计的衔接方法

DFD 画完不等于工作结束,它真正的价值在于往下游传递。我的做法是让 DFD 和后续设计形成明确的对应关系:每个最底层的加工对应一个服务方法或一个功能模块,每个数据存储对应一张物理表,每条数据流对应一组接口出入参。这个映射一旦建立,详细设计阶段的讨论就有了共同语言。

举库存扣减这个加工,它在图上对应 2.4"扣减库存并记录流水",落到设计就是两个动作:更新台账的锁定量和实际量、向流水表插入一条记录,这两个动作必须放在同一个事务里。图上把它们画成一个加工,实际上已经在暗示这种强耦合关系。反过来,2.2"校验可用库存"和 2.4 分开画,也就提示了它们可以不在同一事务内,中间可能存在时间差,需要用乐观锁或版本号来兜底。

这里说个我吃过亏的地方:早期做项目时,我把 DFD 当成一份交差文档,画完就锁进文件夹,开发和测试各看各的需求文档,结果三方对"库存可用量"的口径理解完全不一样,一个认为含锁定量,一个认为不含,测试用例都写反了。后来我坚持在详细设计评审时把 DFD 投在屏幕上,逐条对着讲,谁有疑问当场在图上标注,效果立竿见影。图这个东西,只有被反复使用才产生价值,画完就束之高阁,那前面的功夫基本白费。

我这些年在库存系统建模上最深的一个体会是:DFD 的难点从来不在符号怎么画,而在于你有没有把业务里的每一次数据变动都想清楚。图只是结果,想清楚才是过程。所以每次开画之前,我都会先花半天时间跟仓库现场的人聊一遍,问他们一笔货从到货到上架,中间经手几张单子、改过几次数字。这些答案比任何建模规范都管用,因为你画的是他们的日常,不是教科书上的示例。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询