简介
第一版只有上传图片的功能,所以领域模型图非常简单。
第二版希望记录图片是哪个用户上传的,同时也支持根据用户、图片来源、图片修改时间来搜索图片;同时希望增加上传视频的功能。
在修改领域模型图时遇到了因「图片搜索」同时依赖「用户」、「图片」 2 个聚合根,产生了复杂的依赖关系,经 AI 帮助通过「领域事件」的方式解决了这个问题。
源码地址 aoemedia-server
第一版
第二版
划分三个模块:文件、图片、视频
增加了用户模块
增加了图片搜索模块
AI 指出红色圈出的 2 个部分产生了复杂的依赖关系,建议使用「领域事件」进行解耦。
从用户模块发布「用户已上传图片」领域事件
AI 又指出了 2 处错误
- 错误的直接依赖:领域事件应通过发布-订阅机制实现松耦合,而非直接硬编码关联。图中直接连线违反了 DDD 聚合间通过事件间接通信的原则。
- 事件发布者错位:用户上传图片的核心行为应属于 图片 或 文件 聚合根的职责。
- 典型流程:用户发起上传 → 图片聚合根创建 → 图片聚合根发布「图片已上传」事件(携带userId)
- 当前设计风险:若由「用户」聚合根直接发布此事件,会导致业务逻辑分散,破坏「图片」聚合根的自治性。
修正建议:由「图片」聚合根发布事件
最终版
领域模型图
领域事件流