Event Sourcing 디자인을 접하고 REST 클라이언트가 필요한 응용 프로그램에서 사용하고 싶습니다 (정확히 RESTTful). 그러나 REST는 CRUD와 유사하고 이벤트 소싱은 작업 기반이므로이를 함께 연결하지 못합니다. REST 서버에 대한 요청을 기반으로 명령 작성을 어떻게 설계 할 수 있는지 궁금합니다. 이 예제를 고려하십시오.
REST를 사용하면 File이라는 자원에 새로운 상태를 둘 수 있습니다. 한 번의 요청으로 새 파일 이름을 보낼 수 있으며, 상위 폴더 및 / 또는 파일 소유자 등을 변경할 수 있습니다.
이벤트 소싱을 사용할 수 있도록 서버를 구성하는 방법. 나는 이러한 가능성에 대해 생각하고 있었다 :
필드가 변경 된 서버에 결정하고 적절한 명령을 생성 (
RenameFileCommand
,MoveFileCommand
,ChangeOwnerCommand
, ...)과 개별적으로 파견. 그러나이 설정에서 각 명령은 다른 명령을 트랜잭션에서 벗어나 자원에 대한 "원자"변경에서 벗어나지 못할 수 있습니다.파견 단 하나 개의 명령 (
UpdateFileCommand
)와 명령 핸들러에서, 더 정확하게 집계에서 변경 된 필드를 결정하고 대신 개별 이벤트를 전송 (FileRenamedEvent
,FileMovedEvent
,OwnerChangedEvent
, ...)전혀 싫어하는 것 : 서버에 대한 요청에서 UI는 여전히 작업 기반이지만 (REST를 통해 통신이 이루어짐) 사용할 명령을 헤더에 지정합니다. 그러나 하나의 요청에서 하나의 필드 만 변경하도록 바인딩되지 않으므로 REST 통신의 다른 사용 (예 : 외부 앱)에서는 실패합니다. 또한 UI, REST 및 ES 기반 백엔드에 상당히 큰 결합을 가져옵니다.
어느 쪽을 선호하거나 이것을 처리하는 더 좋은 방법이 있습니까?
참고 사항 : 이벤트 소싱을 위해 Java 및 Axon Framework로 작성된 앱.