领域驱动的设计,事件源和不断发展的模型

mdo*_*mdo 5 domain-driven-design event-sourcing

Eric Evans讨论了DDD中不断发展的模型,因此重构对于DDD似乎至关重要。当一个人拥有世界的关系持久状态时,您可以通过更改数据库架构的迁移来处理模型更改。

使用事件源时如何应对模型更改?如果聚合中发生不兼容的更改,从而阻止了事件的重播,那么是否存在某种最佳实践?还是只是不?

Mik*_*eSW 2

事件只是 DTO。只要事件本身没有改变,只要你仍然有一个对象,模型如何改变并不重要。如果您需要更改事件,您可以使用所需的属性“升级”它。Apply 方法会知道如何处理它。在不了解细节的情况下,我无法提出具体的建议。

如果模型变化太大,基本上现在您有 2 个聚合根 (AR) 而不是以前的一个,这意味着您有新的不同聚合,它们不会使用旧事件。基本上,您从旧的 AR 开始,创建新的 AR 并生成特定于这些 AR 的相应事件。因此,在这种情况下,您实际上并不存在兼容性问题。

使用事件并不像“经典”OOP 和 RDBMS 模式那么简单,但如果您从业务角度思考并将对象视为域概念,它们会更加灵活。更改模型意味着业务概念定义或用法也发生了变化,因此现在您正在处理一个不同的(就持久性而言是新的)概念。