我遇到了事件源设计,我想在需要REST客户端(准确地说是RESTful)的应用程序中使用。但是,由于REST非常像CRUD,并且事件源基于任务,因此我无法将它们连接在一起。我想知道您如何设计基于对REST服务器的请求的命令创建。考虑以下示例:
借助REST,您可以将一个新状态放入名为File的资源中。在一个请求中,您可以发送新的文件名,可以更改父文件夹和/或更改文件的所有者,依此类推。
如何构造服务器,以便可以使用事件源。我在考虑这些可能性:
确定服务器上哪些字段被改变,并创建相应的命令(
RenameFileCommand
,MoveFileCommand
,ChangeOwnerCommand
,...)并单独派遣这些。但是,在这种设置中,每个命令都可能失败,从而使其他命令无法进行事务处理,从而无法进行资源的“原子”更改。调度只需要一个命令(
UpdateFileCommand
),并在命令处理程序,更精确地在总量上,确定哪些领域发生了变化,并发送单个事件,而不是(FileRenamedEvent
,FileMovedEvent
,OwnerChangedEvent
,...)我一点都不喜欢这个命令:在对服务器的请求中,我会在标头中指定要使用的命令,因为UI仍基于任务(但通信是通过REST完成的)。但是,在REST通信的任何其他用途(例如,外部应用程序)中,它都将失败,因为它们不一定要仅更改一个请求中的一个字段。另外,我在UI,REST和基于ES的后端中引入了很大的结合。
您更喜欢哪一个,或者有更好的方法来解决这一问题?
旁注:使用Java和Axon Framework编写的用于事件源的应用程序。