DDD实战:图书馆系统的事件风暴建模全景解析
引言:什么是事件风暴建模
事件风暴(EventStorming)是领域驱动设计(DDD)中一种高效的协作建模方法。通过贴纸、白板和跨职能团队的协作,可以快速梳理复杂业务领域的核心流程和关键事件。本文将详细解析一个图书馆管理系统的事件风暴建模过程,展示如何从混沌的业务场景中识别出清晰的领域模型。
第一阶段:识别核心业务流程
1.1 闭架借阅流程
我们从最基础的"闭架借阅"流程开始建模。这是普通读者(Regular Patron)最常见的借书方式:
- 发起预约:普通读者可以预约某本图书
- 数量限制:当预约数量达到上限时,系统需要阻止继续预约
- 后续操作:读者可以选择取消预约或实际借出图书
- 完成闭环:当图书被借出后,预约状态自动完成,触发还书流程
- 超时处理:系统每日检查预约记录,自动取消超时未处理的预约
![闭架借阅流程示意图]
这个流程看似简单,但在建模过程中我们发现团队成员对"预约"、"借出"等术语的理解存在差异,这促使我们建立了统一的术语定义。
1.2 开架借阅流程
研究型读者(Researcher Patron)享有不同的借阅规则:
- 无限期预约:可以发起无期限限制的预约
- 操作选项:同样可以选择取消预约或借出图书
- 流程完成:图书借出后自动完成预约状态
- 关键差异:开架预约不会自动过期
![开架借阅流程示意图]
第二阶段:识别公共子流程
通过对比两种借阅模式,我们发现它们都涉及一个公共核心流程——图书归还流程:
- 归还触发:任何读者都可以归还图书
- 超期处理:如果借阅超期,归还时自动登记
- 费用计算:归还时触发费用计算流程
- 每日检查:系统每日检查并登记超期借阅记录
在这个过程中,我们特别明确了"借出"(Checkout)的精确定义:指读者实际获取图书所有权的行为,与预约(Hold)有本质区别。
第三阶段:扩展系统边界
3.1 图书编目流程
深入分析后发现,我们还需要考虑图书的来源问题——图书编目系统:
- 图书入库:馆员可以添加图书元数据到目录
- 副本管理:具体的图书副本也可以单独登记
- 问题标记:图书下架流程存在未明确的业务规则(标记为热点问题)
3.2 术语精炼
在这个阶段,我们发现"图书"在不同上下文中有不同含义:
- 编目上下文:指图书的元数据描述
- 借阅上下文:指具体的物理副本
这种语义差异是识别限界上下文(Bounded Context)的重要线索。
第四阶段:划分限界上下文
基于以上分析,我们初步识别出两个核心限界上下文:
- 借阅上下文(Lending):包含预约、借出、归还等业务流程
- 编目上下文(Catalogue):负责图书元数据和副本的管理
这种划分遵循了DDD的核心原则——根据业务语义而非技术实现来划分系统边界。
建模经验总结
- 术语统一:事件风暴中发现的术语歧义必须立即澄清并记录
- 热点标记:对不确定的业务规则要明确标记,避免过早决策
- 流程对比:相似流程的差异分析往往能发现重要的业务规则
- 上下文划分:术语的语义边界通常是限界上下文的自然分界点
通过这次事件风暴工作坊,我们不仅理清了图书馆核心业务流程,更重要的是建立了团队共享的通用语言(Ubiquitous Language),为后续的详细设计奠定了坚实基础。
提示:在实际项目中,事件风暴通常需要多次迭代。第一次工作坊的目标是建立全景视图,后续可以针对特定子域进行深入建模。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考