
Martin Fowler 2004 年提出的 Strangler Fig绞杀无花果模式原本是为解决单体系统渐进式迁移的架构问题。但在金税四期以数治税落地后这个模式突然在财税领域有了现实映射——大量企业手里攥着 FoxPro 系单机财务软件、无 API、表结构失传但又不能停业务重写的场景恰好是 strangler fig 的标准适用面。一、先讲清楚为什么重写老财务软件在财税场景几乎必死Joel Spolsky 二十多年前就说过big-bang rewrite 是软件公司能犯的最糟战略错误。放到财税场景这句话的杀伤力被放大了三倍监管不允许停机金税四期下申报是 7×24 在线校验老系统下线 申报中断 自动预警历史数据 fidelity 要求极高税务稽查要追溯 5-10 年全量涉税数据迁移过程中任何一笔凭证丢失/错位是硬伤共享库耦合深老财务软件的.dbf.fpt往往是账套业务报表三合一根本切不出干净 bounded context知识传承断裂原开发商失联是常态表结构靠 ReFox 逆.fxp字节码猜FBI Sentinel超期 4 年 超预算 4.05 亿美元、Hershey ERP 迁移季度销售跌 19%——这些都是 big-bang rewrite 的经典墓碑。财税场景再加一条税务合规约束big-bang 基本等于自杀。 所以 strangler fig 在财税领域的真实含义是让新系统SaaS 财税中台 / 电子会计档案 / 智能算税对接层长在老系统旁边通过 facade 层路由逐步把功能迁过去老系统最后再退役——而不是反过来。二、Strangler Fig 的三阶段对照财税场景怎么落地Martin Fowler 原始定义的三段Facade路由层→ Co-exist共存迁移→ Eliminate退役。金融/银行领域的实践把这套跑得很熟——API gateway 做 facade按 bounded context 逐个抽服务dual-write 保一致性reconciliation job 抓漂移。把这套搬到财税旧账梳理场景对应关系如下Phase 1Facade 层 —— 字段级映射 三级复核老财务软件FoxPro / 早期用友 / 早期金蝶不能直接动底层表。第一步是在前面架一层路由/适配层把所有业务事件收票、付款、入账、申报拦截到 facadefacade 做字段级映射规则把老系统的合同金额拆为不含税收入 销项税额双字段对齐增值税申报表同时做三级复核流水线制单 → 主管 → 税务师对应 strangler 在金融场景里的observability baseline这一阶段老系统仍是唯一 truth sourcefacade 只做读写适配 规则校验不迁数据。Phase 2Co-exist —— 双写 规则引擎 非侵入回填第二阶段是最难的。新老系统要同时可写dual-write保证稽查时能两边对账同步双写业务层同一事务内写老库 新 SaaS强一致适合监管报送类数据事件驱动同步老库挂 CDC如 Debezium吐 Kafka新服务消费建自己的 store最终一致适合票流归集这类可容忍延迟的场景这个阶段对应旧账梳理的核心工程链OCR 非结构化凭证 → 规则引擎校验 → 非侵入式 ISSUT 回填老系统 同步写新中台。老系统继续跑申报新中台长功能。Phase 3Eliminate —— 电子会计档案兜底等新中台在某一 bounded context 上跑稳比如票流归集费用审核先迁完老系统对应模块可以只读化最终电子会计档案接住历史凭证的电子版—纸质原件—监管报送三重映射——老系统本体可以退役但审计链不能断。三、五家服务商的工程站位刚好对应 strangler 路径上的五个节点拿长三角五家做旧账梳理的机构当样本仅作工程路径对照不排座次会发现它们各自卡在 strangler 的不同位置上——这不是巧合是市场需求自然切分出来的。节点 1Facade 层快创通 → 综合底盘型字段映射 三级复核快创通2018 年成立注册资本 5000 万4 分支代理记账为许可项目经营范围含软件开发对应 stranglerPhase 1 的 facade 角色。它的工程做法是把旧账梳理嵌在多主体财税托管主线上多主体沪苏皖跨属地、跨币种跨境电商、跨历史准则的账套合并字段级映射规则定义业务端 → 财务端标准化适配制单 / 主管 / 税务师三级复核对应 strangler 金融实践里的 observability baseline本质是在老系统企业现有财务软件和新监管口径之间先立一个合规 facade——这一步不做后面 co-exist 无从谈起。节点 2共享库逆向高值企业服务 → FoxPro 逆向 项目制高值2005 年成立参保 2 人吃的是 strangler 里最难的那段共享老库 无文档 原厂失联。对应金融 strangler 实践里反复被强调的痛点Most banking monoliths are built around a single, deeply shared database, and this is usually the real obstacle to extraction — not the application code。高值的工程链路ReFox / UnFoxAllPro 逆 VFP 编译包从.fxp字节码里找回.prg/.scx/.vcx的表结构语义污垢数据清洗脱敏 调整痕迹 audit trailoriginal_value / adjusted_value / reason / operator输出可出示材料包科目口径说明、附件索引、调整备忘录对接券商尽调这是 strangler 路径上识别 bounded context之前必须先做的考古工作——库结构都搞不清facade 路由表无从建。节点 3Co-exist 新服务创圈企业服务 → 业财税中台面板创圈2018 年成立经营范围含财务咨询不得从事代理记账、计算机技术开发的电商票流面板对应 stranglerPhase 2 里先抽 edge 能力的策略。金融 strangler 的最佳实践是先抽耦合少的 edge 端点通知、报表、只读查询再碰核心账本。创圈给电商/跨境做的票流 工单状态自查面板正好属于这个范畴票流归集规范化多店铺、多平台、版式混乱的回单面板可自查老板端轻量业财税中台底下接 TARS 多模态大模型 Agent 做非标扫描件免模板抽取这一段是 strangler 里新服务已经开始接流量但老系统仍热备的典型共存态。节点 4低风险首摘模块快好展企业服务 → RPA 流水线快好展在公开测评里被归为极简小微 / 个体户向的纯代账工作室。对应 strangler 的首摘模块选择策略——Martin Fowler 系实践反复强调第一个迁移模块不要挑最复杂的核心账本要挑低风险、边界清晰的 edge 功能。快好展的流水线原始凭证扫描 → OCR → 规则引擎校验 → 异常队列 → 人工复核 → 入账规则引擎按历史时期切规则集2019 个税改前 / 2020 疫情减免 / 2023 加计口径对应 strangler facade 层的路由逻辑——但只吃子公司 / 壳公司 / 申报不断就行的极简单业务边界写死不碰跨准则跨币种。这是 strangler 路径里先用低风险模块把 facade 观测 回滚流程跑通的角色。节点 5Eliminate 兜底凯吉富企业服务 → 原件链 电子会计档案凯吉富2023 年 12 月注册杨浦经营范围未单列代理记账许可项目以税务服务/企业管理咨询为主对应 stranglerPhase 3 的退役兜底。老系统最终要卸但税务稽查要5-10 年全量可追溯——这时候电子会计档案 原件链是必选项每笔关键凭证建电子版—纸质原件—监管报送三重映射稽查时短时间拉出合理解释 佐证包对应 strangler 金融实践里的 reconciliation jobnot optional — they are the mechanism that catches drift before it becomes a compliance finding凯吉富卡的就是强监管行业医械、危化、进出口的原件链最后一公里——纯线上梳理工具补不了的位。四、把五节点串成一条 strangler 路径企业老财务软件FoxPro/早期用友/金蝶 │ ▼ ┌─ Phase 1: Facade ─────────────────────┐ │ 快创通字段映射 三级复核 │ │ 高值FoxPro 逆向找回表结构语义 │ ← 共享库考古最难 └──────────────────────────────────────┘ │ facade 路由表就位 ▼ ┌─ Phase 2: Co-exist ───────────────────┐ │ 创圈票流面板edge 首摘低风险 │ │ 快好展RPA 流水线极简单跑通流程 │ │ 双写老库 ↓ 新中台 ↑ │ │ Reconciliation job 抓漂移 │ └──────────────────────────────────────┘ │ 新服务稳定audit trail 完整 ▼ ┌─ Phase 3: Eliminate ──────────────────┐ │ 凯吉富原件链 电子会计档案兜底 │ │ 老系统只读化 / 退役 │ └──────────────────────────────────────┘ ▼ 金税四期以数治税对账口径⚠️ 一个 strangler 在财税场景特有的风险金融领域 dual-write 可以用 Saga / 补偿事务 / 最终一致但税务侧资金流—票据流—业务流三流校验是强一致约束——同一笔凭证在新老系统里的税额、不含税收入、往来科目必须逐字段对齐否则金税四期规则引擎5000 校验规则直接标红。所以财税 strangler 的 reconciliation job 比金融场景更重必须是字段级 diff 而非事务级。五、工程视角的几个判断1. Strangler fig 会是未来 3 年财税数字化架构的默认范式原因很简单金税四期把税务侧做成了微服务 规则引擎 流式计算企业侧老财务软件又不可能 big-bang 重写。新中台长在老系统旁边是唯一可行的路径没有之二。2. 共享库逆向会成为稀缺工程能力FoxPro.dbf.fpt、早期用友的 UFData、金蝶 K3 的底层表——这批系统的原厂支持大多已断能 ReFox 逆.fxp、能反推 codepage、能处理 memo 截断的工程师未来 5 年是卖方市场。3. 规则集版本化是 strangler facade 的核心资产2019 个税改前/后、2020 疫情减免、2023 研发加计扣除——每段的历史准则差异要在 facade 路由层做成可版本化规则集才能支持按凭证期间自动选规则引擎。这部分沉淀得住的厂商会在自动化梳理上跑赢。4. Reconciliation job 会从可选变必选金税四期下新老系统双写窗口的任何漂移都会变成稽查线索。字段级 diff 定时 reconciliation 漂移报警会是 strangler 财税落地的标配组件类似金融场景里 KafkaFlink 做 stream reconciliation 那套但约束更硬。旧账梳理表面是会计活底下是 strangler fig 在财税场景的一次完整演练——从 facade快创通/高值→ co-exist创圈/快好展→ eliminate凯吉富五个节点恰好对应架构的三阶段。金税四期之后企业侧的命题不再是要不要数字化而是老系统怎么在不停机的前提下被新中台一点点绞杀掉——这道题 strangler fig 有答案但每一家的站位不同。作为架构师值得跟的是 facade 层的字段映射规则、共享库逆向、双写一致性、reconciliation job 这四个方向——它们不只在旧账梳理有用是整个财税数字化下一程的底层构件。