# 커맨드와 이벤트 - [[커맨드]]는 한 행위자로부터 다른 구체적인 행위자에게 전달된다. - 보내는 행위자는 받는 행위자가 커맨드를 받고 구체적인 작업을 수행하길 바란다. - API 핸들러에 폼을 전달하는 행위는 커맨드를 전달하는 행위와 같다 - 커맨드의 이름을 붙일 때는 `allocate stock(재고를 할당하라)`, `delay shipment(선적을 지연하라)`와 같은 명령형 동사구를 사용한다 - [[커맨드]]는 [[의도]] [[intent]]를 잡아낸다. - 커맨드는 시스템이 어떤 일을 수행하길 바라는 의도를 드러낸다. - 그 결과, 커맨드는 보내는 행위자는 커맨드 수신자가 커맨드 처리에 실패했을 때 오류 정보를 돌려받기를 바란다. - [[이벤트]] [[event]]는 행위자가 관심있는 모든 리스너에게 보내는 메시지다. - BatchQuantityChanged 라는 이벤트를 발행해도 발행하는 행위자는 누가 이 이벤트를 받는지에 대해 모른다 - 이벤트를 보내는 쪽은 받는 쪽의 성공이나 실패에 관심 없다. ## 이벤트와 커맨드 비교 ^ ^ 이벤트 ^ 커맨드 ^ ^ 이름 | 과거형 | 명령형 | ^ 오류 처리 | (송신하는 쪽과) 독립적으로 실패함 | (송신하는 쪽에 오류를 돌려주면서) 시끄럽게 실패함 | ^ 받는 행위자 | 모든 리스너 | 정해진 수신자 |