티스토리 뷰

패키지 사이에 의존성을 낮추는 방법

  • 절차지향 로직
    • 사용할 패키지에 인터페이스를 만들고 구현은 도메인에 해당하는 패키지에서 구현
  • 도메인 이벤트 퍼블리싱

 

도메인 이벤트 퍼블리싱이란?

  • 패키지 사이에 결합도를 낮추기 위해 사용
  • 도메인이 이벤트를 생성하면 이벤트 디스패처리스너에게 전달
  • 어떤 동작 이후에 연관된 동작을 요청할 때 사용
    • ex) 식사를 마친 테이블에 계산이 끝나면 테이블 상태를 변경한다.

 

구현 방법

  • Spring Framework에서 제공하는 기능으로 구현하는 방법
  • Spring Data JPA에서 제공하는 기능으로 구현하는 방법

 

Spring Data JPA의 이벤트 구현 예제 & 전체 소스

Publisher

// 이벤트로 전달할 형식
public class SpringEventPublisher {
    private final String message;

    public SpringEventPublisher(String message) {
        this.message = message;
    }

    public String getMessage() {
        return message;
    }
}

 

Listener

// 도메인으로부터 전달 받은 이벤트를 실행한다.
@Component
public class SpringEventListener {
    @EventListener
    public void listener(SpringEventPublisher eventPublisher){
        System.out.println("==================================");
        System.out.println("Receive message : " + eventPublisher.getMessage());
        System.out.println("==================================");
    }
}

 

Domain

// AbstractAggregateRoot 상속 받고 registerEvent로 이벤트를 등록한다.
@Entity
public class SpringEvent extends AbstractAggregateRoot<SpringEvent> {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    protected SpringEvent() {
    }

    public SpringEvent sendMessage(){
        registerEvent(new SpringEventPublisher("event message"));
        return this;
    }
}

 

 

참고

[우아한테크세미나] 190620 우아한객체지향 by 우아한형제들 개발실장 조영호님

https://www.daddyprogrammer.org/post/14797/springboot-domainevent/

[Spring] 스프링 데이터 AbstractAggregateRoot 를 통해 도메인 이벤트 등록하고 테스트 하기

Spring Data JPA - 도메인 이벤트

DDD Aggregates and @DomainEvents

댓글
Total
Today
Yesterday
링크
Apple 2023 맥북 프로 14 M3, 스페이스 그레이, M3 8코어, 10코어 GPU, 512GB, 8GB, 한글