Events 仅追加事件存储是否会导致仅追加代码库?

Events 仅追加事件存储是否会导致仅追加代码库?,events,domain-driven-design,event-sourcing,maintainability,Events,Domain Driven Design,Event Sourcing,Maintainability,在使用事件源实现应用程序时,工作的持久性引擎是一个事件存储。也就是说,事件的只附加日志,以过去时、顺序或发生方式表示。通过简单地通过应用程序重放事件,可以再现任意时间点的状态 我担心的是,这个仅附加事件存储是否会不可避免地导致仅附加代码库?如果删除或修改代码可能会使应用程序无法重播事件序列,那么如何维护代码库?源代码行的数量会减少吗 如果必须修改业务规则,或者更糟,如果应用程序早期的一个讨厌的bug允许它进入禁止状态,该怎么办?故障代码必须无限期地保持有效吗?当然,从理论上讲,这些问题中的很多都

在使用事件源实现应用程序时,工作的持久性引擎是一个事件存储。也就是说,事件的只附加日志,以过去时、顺序或发生方式表示。通过简单地通过应用程序重放事件,可以再现任意时间点的状态

我担心的是,这个仅附加事件存储是否会不可避免地导致仅附加代码库?如果删除或修改代码可能会使应用程序无法重播事件序列,那么如何维护代码库?源代码行的数量会减少吗

如果必须修改业务规则,或者更糟,如果应用程序早期的一个讨厌的bug允许它进入禁止状态,该怎么办?故障代码必须无限期地保持有效吗?当然,从理论上讲,这些问题中的很多都可以通过使用事件版本控制、事件模式、快照版本控制等来解决。但是,在这一点上,事件源不是成为了一种负担吗

活动采购是一项相当新的技术,至少在生产中是如此。我怀疑已经在上面运行了几年以上的应用程序很少。10年后他们会是什么样子?对于企业应用程序来说,这不是一个不切实际的时代

我担心的是,这个仅附加事件存储是否会不可避免地导致仅附加代码库

不,它意味着一个仅附加的模式,它与您的实现解耦

如果必须修改业务规则,或者更糟,如果应用程序早期的一个讨厌的bug允许它进入禁止状态,该怎么办?故障代码必须无限期地保持有效吗

不是真的-域与持久表示分离

是的,您需要将一些常见的场景合并到您的设计中;例如,您可能需要补偿事件历史记录早期的错误

从根本上讲,它与仅存储当前状态时的操作没有什么不同。如果您的数据库中有一个处于错误状态的聚合表示,您只需就地更新它,对吗?通过将一些字段更改为它们应该是什么

活动采购的理念是一样的;您有一个事件流,它会生成您不希望处于的状态。您可以找出需要哪些附加事件才能达到您应该处于的状态,并附加它们。塔达

当然,从理论上讲,这些问题中的很多都可以通过使用事件版本控制、事件模式、快照版本控制等来解决。但是,在这一点上,事件源不是成为了一种负担吗

不是吗?是的,您需要在您的模式中设计灵活性,以便您可以积极地发展您的模型,但在其核心,它与存储当前状态没有什么不同——如果必须,您仍然可以迁移

但你也可以利用其他杠杆

它可能确实需要更多的前期设计资金——您必须考虑模式生命周期,以及您的记录簿从模型的多次修订中积累数据这一事实

这并不意味着它是一双适合所有人的鞋。设计好的消息模式是一项投资。如果该模式的消费者(在本例中是指您的模型)不需要独立发展,那么这种投资可能没有意义