1. Domain Event 的不可变性(immutability)中事件一旦发布即不可修改
为什么 Domain Event(领域事件)必须是不可变的?一旦发布即不可修改的含义是什么?
- 领域事件的不可变性
- 事件作为"已发生事实"的语义
- 事件不可变与审计/重放的配合
Domain Event 描述"已经发生的事实"(past fact),一旦发布即不可修改,因此必须是不可变对象:所有字段在构造时由 final 固化,不提供 setter,事件对象在生命周期内不可变。原因:事件是历史的记录,若可修改,则事件不再代表"当时发生的事实",无法用于审计、重放、事件溯源与对账;事件可能被多个消费者订阅,若可修改会形成共享可变状态,一个消费者修改影响其他消费者。事件发布后,内容应固化,若要表达新状态应发布新事件。不可变事件可安全并发消费、可被持久化、可被重放。
事件不可变是"事件即事实"的体现。可变事件会破坏历史记录的准确性,并造成并发安全问题。设计上事件一律 final 字段 + 构造器/工厂创建,配合事件 ID 与时间戳,保证事实的完整与不可篡改。