外观主题
阅读语言

管道-过滤器模式 —— 可插拔、可重排、可提前终止的处理链

软件 本站软件 3小时前
https://yxp.hk/p/j352HP

📦 开源仓库:learn_pipeline_filters · 纯 Python 标准库 · 学习演示项目

一个巨型函数处理上传?改一处崩全身。管道-过滤器(Pipes and Filters)把请求拆成一串单一职责的过滤器,数据像 Unix 管道一样流过去——每个环节只做一件事,可以随插、随拔、随换序。

核心思路

  上传文件
     │
     ▼
 [校验] → [病毒扫描] → [缩略图] → [落库] → [通知]
  filter1    filter2      filter3    filter4   filter5

类比:cat log | grep ERROR | sort | uniq -c

  • 单一职责:校验完全不知道落库的存在
  • 可插拔:在病毒扫描和缩略图之间插一个水印过滤器,其他环节零改动
  • 可重排:重建链条就能换执行顺序
  • 可测试:拿假 context 就能单独测任意过滤器
  • 提前终止:任一过滤器可以让整条流水线中止(坏类型、有病毒),下游不再执行

演示场景

  1. 正常路径:合法 PNG 通过全部 5 个过滤器
  2. 插入新过滤器:在 virus_scan 后插 watermark,链条变长其余不动
  3. 坏类型提前终止:.exe 在校验就被拒,下游过滤器不执行
  4. 病毒提前终止:evil.png 停在病毒扫描
  5. 重排:把 notify 挪到 thumbnail 之前,按新顺序执行

运行

python run_all.py

纯 Python 标准库,零第三方依赖,一键跑完所有演示场景后自动退出。
仓库:github.com/yxpil/learn_pipeline_filters,欢迎 Star 与提 Issue。