【发布时间】:2026-01-29 11:45:01
【问题描述】:
我猜这个问题可能与任何事件系统有关,例如事件溯源/DDD/Lambda 架构、ESB、Actor...我标记了这个问题,以便有这些系统经验的人可以回答。
我目前正在尝试我的初创公司an original way to build user interfaces,使用 DDD / 事件源世界中经常使用但应用于 javascript 单页应用程序的概念。我想要的是一个纯粹的功能 UI,我可以在其中重播内存中的事件日志以恢复 UI 状态(事件日志不会在浏览器关闭时持久化,它只是为了让事情变得容易推理并可能启用很酷的功能像免费的 UI 撤消/重做,像 ELM 中的时间旅行调试器......)
有时我只是想知道如何为事件选择正确的抽象级别,因为在我看来,刚刚发生的事情可能有多种“解释”。
基本上,在 JS SPA 中,许多事件是在用户单击按钮、链接或类似内容后触发的。所以我可以在我的事件日志中添加一个条目作为这个低级事件(在设法使其可序列化之后)。但是这个事件也可以被解释为用户在高级抽象中实际所做的事情的表示。
举个例子,假设我的 UI 上有一个弹出窗口,它会在某个时候显示。
当用户点击弹出窗口之外的任何地方时,它应该被关闭。
现在让我们想象一下,用户点击弹出窗口外的div 以关闭它。我应该将什么事件抽象级别添加到事件日志中?
- 用户点击了
div? - 用户在弹出窗口外点击了吗?
- 用户已关闭弹出窗口?
这 3 个事件抽象对我来说似乎是正确的:它们描述了过去发生的事情,但在不同的抽象级别。所以我问自己一些问题,比如:
- 我必须在 3 个抽象级别中选择一个吗?如果可以怎么选?
- 我可以或应该触发所有 3 个事件吗?如果是这样,事件日志会不会变得有点乱?
- 我是否应该使用 DDD Saga 之类的概念,以便在收到“用户单击 div”事件时,Saga 可以触发“关闭弹出”命令或其他什么?
【问题讨论】:
标签: domain-driven-design akka esb actor event-sourcing