안녕하세요 Kusinsa에서 주문을 개발하며 겪은 글입니다.


요구사항
- 주문 완료 시에 주문 기록을 저장을 해야 합니다.
- 주문 완료 시에 포인트를 지급받아야 합니다
문제점
- 주문 메서드에 만약 포인트 주문 기록 저장과 저장 로직을 넣는다면 주문+주문 기록 저장+포인트 지급이라는 로직을 수행하기 때문에 강한 결합으로 묶여있어 유지 보수가 어려울 뿐만 아니라 코드의 구조가 복잡해지게 됩니다.
- 포인트 저장을 하다가 만약 예외가 발생한다면 주문까지 롤백이 된다면은 좋은 방법이 아닙니다
요구사항
(주문 → 주문 기록 저장 → 포인트 지급)가 아닌
(주문 → 주문 완료) → (포인트 지급 → 지급 완료), ( 주문 기록 저장 → 저장 완료)로 따로 실행되면 됩니다.
따라서 이러한 문제점을 해결하는 방법 중 이벤트를 적용해서 해결하는 방법이 있습니다.
이벤트의 실행 순서
- 생성 주체(주로 도메인 객체)에서 이벤트를 발생하면 이벤트 디스패처에게 전달한다.
- 이벤트 디스패처가 이벤트 핸들러를 연결해 준다.
- 이벤트 핸들러에서 이벤트에 담긴 데이터를 통해 원하는 기능을 실행한다.