ERP 架构师笔记:定义驱动的框架设计(系列目录)


ERP 的复杂度不在单一功能有多难,而在同一件事被重述太多次、乘以太多张表、再乘以太多次定制。

2026 iThome 铁人赛连载,共 30 篇,2026-08-17 至 2026-09-15。全系列已完结。 博客园版每天转载一篇,已转载的篇名可直接点开;繁体原文全系列见 HackMD。

这个系列谈的不是怎么用框架做一张表单,而是怎么设计一套能驱动上百张表单的框架:唯一真相放在定义而非代码,数据库结构、SQL、多前端界面、验证与计算、多语言、多租户与定制化都从同一层定义衍生。案例用 Northwind 验证,但案例是佐证,不是主角。

谈机制与取舍,不写使用教学;每个设计的代价会跟它的好处写得一样清楚。


第一章 · 定义驱动的起点(Day 1–3)

问题是什么、范式的分歧点在哪里,以及案例登场。同一个字段在两种范式下各要改几处,这一章给出对照。

第二章 · 定义层设计(Day 4–8)

定义文件有哪几种、各自的生命周期为什么不同,以及一份结构描述怎么长出数据库结构、CRUD SQL、多前端界面与业务规则。

第三章 · 数据访问与缓存(Day 9–12)

不写 DTO 的话,数据怎么跨层传;多数据库的共同行为只有哪两件;一份缓存怎么知道它的来源已经变了。

第四章 · 业务逻辑与 API(Day 13–18)

定义表达不了的那一段由谁接手、扩展点开在哪里,以及一次调用从调用端走到业务对象经过了什么。

第五章 · 多租户与定制化(Day 19–21)

同一套程序怎么让每一家公司长得不一样,而且不必开分支、不必重新编译部署。定制化这条线目前停在哪里,也说清楚。

  • Day 19 · 定制层的范围与叠加粒度
  • Day 20 · 多语言定制与资源结构
  • Day 21 · 业务逻辑定制与 Plugin 的四个时点

第六章 · 传输、安全与审计(Day 22–25)

数据送出去的时候长什么样、经过哪几道保护、谁有资格调用,以及事后查得到什么。

  • Day 22 · XML、JSON 与 MessagePack 的分工
  • Day 23 · API Payload 安全管道:顺序、保护等级与密钥
  • Day 24 · 权限的三轴:动作、行与列
  • Day 25 · 审计轨迹与变更的前后值

第七章 · 数据语义正确性(Day 26–28)

金额、数量、日期与时刻,这些值的语义怎么从定义一路保到数据库,中间不被任何一层悄悄改掉。

  • Day 26 · 数值语义、多币种与计量单位
  • Day 27 · Date、DateTime 与 Time 的语义分界
  • Day 28 · DateTime 的时区转换

第八章 · 案例回访与全图(Day 29–30)

拿 Northwind 那套应用逐项查看:定义、框架与应用代码各负责哪一段。最后给一张全图,以及这套设计不适合什么系统。

  • Day 29 · 定义、框架与应用代码各负责哪一段
  • Day 30 · 三段开发深度与框架全图

关于这个系列的框架

系列里谈的机制都做在一套开源框架上:bee-library。案例是另一个 repo,bee-northwind-avalonia,框架以包引用进来,里面只有应用自己的定义文件与程序。

更新:系列当时用的 Bee.NET(bee-library)已由 Polhem 接手,机制沿用,框架做了大幅重构,以 MIT 授权开源。bee-library 与 bee-northwind-avalonia 两个 repo 已封存,文中的类型名与代码以写作当时的 bee-library 为准。

框架在这个系列里只有一个角色:证明这些想法不是纸上谈兵。你完全可以不用它,只把「让定义当源头」这个想法带走,用你熟悉的语言和工具去实现。

文章摘自:https://www.cnblogs.com/jeff-tsai/p/23459221/ironman-2026