内容版本控制 - 自动保存与事件溯源不兼容
Content versioning - auto save is not compatible with event sourcing
我想对一些文章进行版本化,以便作者可以根据需要恢复以前的版本。这些文章包含额外的内容,例如我不想版本化的图像,只是保存在服务器上。我想要草稿,它可以被覆盖,我想要一个提交系统。因此,如果提交草稿,则应在服务器上创建新的内容版本。我想在服务器上自动保存这些草稿,以便它们可以在客户端之间同步。如何解决自动保存又不让大量的草稿自动保存事件污染事件存储?
我想我需要一些 GC 逻辑来存储事件,以便在保存新草稿后使之前的草稿自动保存无效。是否已经存在解决方案,或者我应该自己编写代码?
应该有两个独立的限界上下文:Editing bounded context
和Content bounded context
(名称可能不同,请适应您的域)。
在Editing BC
中你不应该使用Event sourcing
作为草稿的持久化机制。相反,您可以使用简单的 CRUD
实体并在每次 Draft
持久化(即自动保存)时发布基础设施事件(即 DraftUpdated(id, timestamp)
)。然后,事件监听器应该将该事件转发给连接的客户端,以便他们更新他们的草稿版本。这个基础设施事件不应该被持久化,它只是一个短暂的事件。您可以使用任何可用的传输机制,例如 SSE or RabbitMQ.
我想对一些文章进行版本化,以便作者可以根据需要恢复以前的版本。这些文章包含额外的内容,例如我不想版本化的图像,只是保存在服务器上。我想要草稿,它可以被覆盖,我想要一个提交系统。因此,如果提交草稿,则应在服务器上创建新的内容版本。我想在服务器上自动保存这些草稿,以便它们可以在客户端之间同步。如何解决自动保存又不让大量的草稿自动保存事件污染事件存储?
我想我需要一些 GC 逻辑来存储事件,以便在保存新草稿后使之前的草稿自动保存无效。是否已经存在解决方案,或者我应该自己编写代码?
应该有两个独立的限界上下文:Editing bounded context
和Content bounded context
(名称可能不同,请适应您的域)。
在Editing BC
中你不应该使用Event sourcing
作为草稿的持久化机制。相反,您可以使用简单的 CRUD
实体并在每次 Draft
持久化(即自动保存)时发布基础设施事件(即 DraftUpdated(id, timestamp)
)。然后,事件监听器应该将该事件转发给连接的客户端,以便他们更新他们的草稿版本。这个基础设施事件不应该被持久化,它只是一个短暂的事件。您可以使用任何可用的传输机制,例如 SSE or RabbitMQ.