数据流(data flow)是数据在系统中传递的路径,用于描述数据从一个位置到另一个位置的流动过程

数据流(data flow)是数据在系统中传递的路径,用于描述数据从一个位置到另一个位置的流动过程。它通常出现在数据流图(DFD, Data Flow Diagram)中,表示信息如何在系统中被处理和传输。一个数据流可以包含一组具有固定结构的数据项,并且其流向可以是:

  • 从外部实体(源,Source)流向加工(Process);
  • 从加工流向数据存储(文件,Data Store);
  • 从数据存储流向加工;
  • 从一个加工流向另一个加工;
  • 从加工流向外部实体(宿,Sink)。

为了增强可读性和理解性,每个数据流应具有一个有意义的名称,如“客户订单信息”或“付款凭证”。但有一个例外:当数据流完全对应于某个文件的全部内容时,例如写入文件或从文件读取,这类数据流通常不需要命名,因为其含义已经由文件本身定义,命名反而冗余。

例如,在一个订单处理系统中:

  • “客户”作为源,发送“订单数据”流向“接收订单”加工;
  • “接收订单”加工将“订单数据”写入“订单文件”;
  • 此时从加工到“订单文件”的数据流可不命名,因为它就是文件本身的全部内容;
  • 而从“接收订单”加工输出到“库存管理”加工的数据流则应命名为“待处理订单”,以明确其用途。
# 示例:模拟数据流的结构定义(非执行流程,仅示意)
class DataFlow:
    def __init__(self, name, source, target, content):
        self.name = name          # 数据流名称(可选)
        self.source = source      # 源节点(加工、外部实体、文件)
        self.target = target      # 目标节点
        self.content = content    # 数据组成

    def describe(self):
        if self.name:
            return f"数据流 '{self.name}': {self.source}{self.target}, 内容: {self.content}"
        else:
            return f"匿名数据流: {self.source}{self.target}, 内容: {self.content}"

# 使用示例
flow1 = DataFlow("客户订单", "客户", "接收订单", ["订单号", "商品列表", "金额"])
flow2 = DataFlow(None, "更新库存", "库存文件", ["商品ID", "新库存量"])  # 不必命名

print(flow1.describe())
print(flow2.describe())

在数据流图(DFD, Data Flow Diagram)中,“加工”(Process)是指对数据进行处理或变换的逻辑功能单元。它接收输入的数据流,对其进行某种操作(如计算、转换、合并、查询等),然后产生输出的数据流。加工不关心具体的实现细节(如代码或算法),而是从逻辑上描述“系统做什么”。

加工的主要特征包括:

  1. 有唯一的编号
    每个加工通常有一个编号(如 P1、P2 或 1.0、2.1),用于在分层 DFD 中标识和追踪,便于分解和细化。

  2. 有明确的名称
    名称应为动词短语,体现其功能,例如“验证用户身份”、“生成订单报表”、“计算税费”等,使人一目了然。

  3. 至少有一个输入数据流和一个输出数据流
    加工必须有输入(数据来源)和输出(处理结果),否则属于“黑洞”(只有输入无输出)或“奇迹”(只有输出无输入),是逻辑错误。

  4. 不关心内部实现
    DFD 是逻辑模型,加工只表示“做什么”,不表示“怎么做”。具体实现由后续的设计阶段完成。

  5. 可以被分解(分层细化)
    高层图中的一个加工可以在下层图中展开为多个子加工,形成层次结构。例如,“处理订单”可分解为“验证订单”、“更新库存”、“生成发票”等。

  6. 不能直接访问数据存储(间接访问)
    加工通过数据流与外部实体或数据存储交互,但不能绕过数据流直接操作文件或数据库。


# 示例:模拟一个加工的行为(非图形建模,仅示意逻辑)
class Process:
    def __init__(self, pid, name):
        self.id = pid           # 加工编号
        self.name = name        # 加工名称
        self.inputs = []        # 输入数据流
        self.outputs = []       # 输出数据流

    def add_input(self, data_flow):
        self.inputs.append(data_flow)

    def add_output(self, data_flow):
        self.outputs.append(data_flow)

    def execute(self):
        # 简单模拟执行过程
        if not self.inputs:
            print(f"警告:加工 '{self.name}' 无输入数据流(黑洞错误)")
            return
        if not self.outputs:
            print(f"警告:加工 '{self.name}' 无输出数据流(奇迹错误)")
            return
        print(f"执行加工 [{self.id}]: {self.name}")
        for out_flow in self.outputs:
            print(f"  输出 → {out_flow.describe()}")

# 使用示例
proc = Process("P3", "计算订单总价")
flow_in = DataFlow("订单明细", "接收订单", "计算订单总价", ["商品价格", "数量"])
flow_out = DataFlow("订单总价", "计算订单总价", "生成发票", ["总金额"])

proc.add_input(flow_in)
proc.add_output(flow_out)
proc.execute()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bol5261

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值