Event Sourcing中DeleteEvent处理与聚合根删除方案咨询
事件溯源模式下聚合根删除方案
核心结论
是,你必须通过新增事件的方式完成聚合根的删除操作,这是符合事件溯源「事件仅追加、不可修改/删除」核心规则的唯一合法实现路径。
具体操作步骤
- 第一步:定义专属的删除领域事件,命名可以按业务规范定为
[聚合根名称]Deleted,比如订单聚合就叫OrderDeleted。事件仅需要携带核心信息:聚合根唯一ID、删除操作触发时间、操作人标识(可选)、删除原因(可选,满足审计需求即可)。 - 第二步:在聚合根的事件处理逻辑中注册该删除事件的响应方法,当事件溯源重放过程中加载到该删除事件时,给聚合根新增的已删除状态位(比如
isDeleted)赋值为true。 - 第三步:调整所有该聚合根的业务操作入口校验逻辑,所有针对该聚合根的查询、修改请求,先校验
isDeleted状态,如果状态为已删除,直接返回「目标资源不存在/已删除」的业务错误,拒绝后续逻辑执行。 - 第四步:如果你的系统采用了CQRS架构拆分读写模型,需要同步调整读模型的投影逻辑:消费到删除事件时,要么直接删除读库对应的冗余记录(读模型是事件的投影,删除不影响源事件数据),要么给读模型也同步标记已删除状态,查询时统一过滤已删除记录即可,两种方案可以根据业务查询效率需求选择。
补充说明:即便你已经确认没有其他聚合引用该聚合根ID,也绝对不要修改或删除历史事件流,完整的事件链可以支撑后续所有业务审计、问题回溯的需求,完全符合事件溯源的设计初衷。
内容的提问来源于stack exchange,提问作者ihsan
相关产品推荐
相关产品推荐

