-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Refactor | CAKK-59 | Message Extractor, Sender 관련 리팩토링 #199
Conversation
Test Results 40 files 40 suites 24s ⏱️ Results for commit 6f9899a. ♻️ This comment has been updated with latest results. |
Codecov ReportAll modified and coverable lines are covered by tests ✅ @@ Coverage Diff @@
## develop #199 +/- ##
=============================================
+ Coverage 89.11% 92.84% +3.73%
- Complexity 326 330 +4
=============================================
Files 110 109 -1
Lines 983 965 -18
Branches 37 34 -3
=============================================
+ Hits 876 896 +20
+ Misses 88 52 -36
+ Partials 19 17 -2
... and 6 files with indirect coverage changes Continue to review full report in Codecov by Sentry.
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
좋은 추상화로 작동되는 것 같습니다 고생하셨습니다!
CAKK-59
리팩토링을 진행하다보니 시간이 꽤 걸리고, 꽤 많은 부분이 변경됐습니다. 다음은 제가 신경 쓴 부분입니다.
위와 같은 부분을 고려하여 external 모듈에게서
내부 비즈니스를 숨기고
, 그 과정에서 Certification이나 Verification이 아닌Message
라는 공통점으로 추상화를 진행하였습니다. 추가적으로, 현재 API 모듈에서 slack 의존성을 받아slackService
를 구현하여 에러 로그를 슬랙에 전송하는 비즈니스가 있는데, 이 부분 또한 리팩토링 하였습니다.위와 같이 간단한 함수형 인터페이스로 구성하였고, 각 메시지 플랫폼 별로 인터페이스를 추가 구성했습니다. 아래는 클래스 다이어그램입니다.
MessageSender의 경우, 저번 PR과 동일합니다.
기존의 CertificationTemplate이 MessageTemplate으로 변경되었습니다.
기존과 다르게 필드에서 의존성을 제거하고 메서드의 파라미터를 통해 전략을 받는 템플릿 콜백 패턴을 구현하였습니다. 다음은 전략 패턴, 템플릿 메서드 패턴, 템플릿 콜백 패턴에 대한 내용입니다.
: 객체들이 할 수 있는 행위 각각에 대해
전략 클래스
를 생성하고, 유사한 행위들을 캡슐화 하는 인터페이스를 정의하여, 객체의 행위를 동적으로 바꾸고 싶은 경우 직접 행위를 수정하지 않고전략을 바꿔주기
만 함으로써 행위를 유연하게 확장하는 방법: 코드에 변하는 부분과 변하지 않는 부분이 있을 때,
변하지 않는 부분
을추상 클래스 내 메서드
로 정의하고,변하는 부분
을추상 클래스 내 abstract 메서드
로 정의하여 자식 클래스에서 변하는 부분을 abstract 메서드를 override 하여 구현하는 패턴: 전략 패턴과 템플릿 메서드 패턴이 합쳐진 형태로, 전략 패턴과 다르게, Strategy를 필드에 가지고 있지 않고,
메서드 파라미터
로 넘겨받는 방식MessageTemplate은 다음과 같이 활용할 수 있습니다.
사업자 인증 또한 위와 같이 리팩토링 하였고, SlackService를 활용하고 있던 에러 관련 슬랙 로깅 또한 리팩토링 후 API 모듈에서 Slack 관련 의존성을 제거 하였습니다.