第一章:王国的困境
在「数字大陆」的智慧王国里,居民们(业务组件)原本生活在一片混乱中:
- 大类、词搜、图搜、面包屑、筛选 五位长老(联合/互斥搜索组件)常因争夺资源吵架;
- 客户端与服务端 的信使(请求事件)常因并发、缓存、跨域等问题送错消息;
- 国王(系统)发现,每次业务变动(如增加搜索类型)都需要手动协调各模块,效率低下且容易出错。
第二章:贤者的规划
贤者(架构师)提出了革命性方案:
1. 领域建模:构建城市蓝图
- 领域层:将王国划分为「大类城」「搜索镇」「列表城」等自治领地(聚合根),每个领地有自己的法律(业务规则);
- 应用层:建立「事件邮局」(事件总线),邮差(观察者模式)负责传递消息;
- 基础设施层:修建「跨城高速公路」(消息队列)和「中央档案馆」(事件存储库)。
2. 互斥协约:五位长老的和解
- 贤者制定规则:
-
- 当「分类长老」发布新政策(如素材分类变更),其他长老(词搜、图搜等)必须响应并调整自己的领域;
- 长老们只能接收他人事件,避免自我循环(互斥协议)。
3. 请求信使的升级
- 为信使(请求事件)配备新工具:
-
- 并发护盾:确保同一时间只有最后一个信使处理关键任务;
- 缓存背包:存储常用信息,减少重复跑腿;
- 跨域飞行器:安全穿越不同领地边界。
第三章:事件总线的运转
核心机制
- 同步快递:紧急事件(如联合查询)通过「即时邮差」(内存队列)直达目标;
- 异步物流:普通事件(如素材展示)由「跨城车队」(消息队列)运输,支持最终一致性;
- 异常处理:迷路的信鸽(死信事件)会被送往「补偿驿站」(死信队列),由专员(补偿服务)重新派送。
关键时刻
- 当「大类城」创建查询时:
-
- 发布「FILTER」事件(领域事件);
- 「搜索镇」监听到事件后清空搜索词、图,并回应「FILTER」;
- 「物流中心」(CQRS模式)更新查询状态视图,用户界面实时刷新。
第四章:王国的繁荣
- 解耦自治:领地间不再直接依赖,通过事件邮局自由协作;
- 历史追溯:中央档案馆记录所有事件,审计问题一目了然;
- 灵活扩展:新增「促销岛」(新业务模块)只需订阅相关事件,无需修改原有领地。
警示寓言
贤者提醒:若在小村庄(简单CRUD系统)强行修建邮局,反而会浪费资源(过度设计)!
记忆锚点
- 五位长老的舞会:联合互斥事件让他们学会轮流领舞;
- 邮差与信鸽:同步快递是闪电侠,异步车队是骆驼商队;
- 档案馆的秘密:每个事件都是王国历史的碎片(事件溯源)。
通过这个故事,复杂的技术概念被转化为王国治理的隐喻,帮助记忆 DDD 与事件总线协同工作的核心逻辑 🌟