instanceOf 분리하기
알림
은 여러 종류가 있습니다.
여러 종류의 이벤트
를 통해 알림
이 각각 생성되며, 알림
이 가지고 있어야 할 정보들이 각기 다른 상황이었습니다.
즉 여러 종류의 이벤트
- 여러 종류의 알림 Entity
가 대응되는 상황이었으며Entity
별로 DTO
와 Response
가 다르게 존재하는 상황이었습니다.
처음에는 알림
을 생성하는 이벤트
를 추상 클래스로 정의하여 Common
패키지에 위치시켰습니다.
이후 각각의 도메인에서는 해당 이벤트
를 상속받아 구현하였고, EventHandler
를 정의하여 이벤트를 받으면 대응되는 알림
을 생성하여 저장하도록 구현하였습니다.
이때 여러 종류의 알림 엔티티
는 Notification
패키지에 위치하고 있었고, 다른 도메인에서는 Notification
을 모르게 하기 위해 Notifiaction
패키지에서 이벤트
에 대응되는 알림
을 instanceof
를 통해 다음과 같이 구분하여 변환하였습니다.
이때 Entity
는 DTO
를 모르도록 구현하고 싶었기에
(DTO
는 Application Layer
에 존재하므로 domain
계층의 Entity
가 이를 알게된다면 domain
-> application
으로의 의존성이 생기기 때문입니다.),Entity
-> DTO
를 변환하는 과정에서도 이와 같이 instanceof
를 사용하였습니다.
마찬가지로 DTO
역시 Presentation
계층의 Response
를 모르게 하고 싶었기에 instanceof
를 통해 구현하였습니다.
그러나 instanceof
의 를 샤용하는 것이 좋지 않다 판단하여, 다음과 같이 수정하였습니다.
- 우선
Event
->Entity
매핑에서는전략 패턴
을 사용하여 구현하였습니다. 각 전략은 이벤트를 대응되는 알림으로 변환하는 코드만 작성하면 됩니다. instanceOf
보다는Entity
가DTO
를 알게 하는 편이 나을 것 같았습니다.(복잡도가 훨씬 낮으며, 또한 알림의 종류가 많아질 경우 훨씬 실수할 위험도 줄어들 것이라 생각하였습니다.)
따라서Noticiation
이라는 추상 클래스에toDto()
라는추상 메서드
를 만들어 각 클래스별로 대응되는 DTO를 반환하게끔 구현합니다.- 마찬가지로
Application Layer
의DTO
에서Presentation Layer
의Response
로 변환하는 과정 역시DTO.toResponse()
라는추상 메서드
를 통해
구현하였습니다.
위 과정을 통해 결국 Notification
에서는 Domain
-> Application
으로의 의존성과, Application
-> Presentation
으로의 의존성이 생겼으나,instanceOf
를 사용할 때 보다 코드도 깔끔해 졌으며, 무엇보다 이후 새로운 알림의 종류가 추가되었을 때 이를 위한 코드의 변경이 불필요해지며, 실수할 위험성도 줄어들었음을 느끼고,
이러한 장점이 더 크다 생각해 변경된 구조를 선택하였습니다.
'모각코 > 2022 동계 모각코 : 미남과 야수' 카테고리의 다른 글
[모각코] 2022 동계 모각코 5회차 결과 (0) | 2023.01.26 |
---|---|
[모각코] 2022 동계 모각코 5회차 목표 (0) | 2023.01.26 |
[모각코] 2022 동계 모각코 4회차 목표 (0) | 2023.01.19 |
[모각코] 2022 동계 모각코 3회차 결과 (0) | 2023.01.12 |
[모각코] 2022 동계 모각코 3회차 목표 (0) | 2023.01.12 |