OrderService
의 주문 사전 저장
의 일부 로직에 대한 책임을 OrderService
-> orderForm
도메인 모델로 책임 변경 리팩토링
#167
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Why
주문 사정 저장
에 대한 OrderService의 책임이 너무 많다보니, OrderService의placeOrderInAdvance
애 사용되는 private 함수가 많아져서, 다음과 같은 불편함을 해결하고자,OrderForm
이라는도메인 모델
을 만들어서 리팩토링 했습니다.private -> public 으로 바꿀까?
했는데, 그러면캡슐화
관점에서 너무 많은 함수들이 노출되어서 좋지 않는 방법이라고 생각하여, 도메인 모델 하나 만들어서 거기서 관리하자 라는 생각을 하였습니다.불편함 1. private 함수 너무 많아서, 가독성이 좋지 않았습니다.
불편함 2. private 함수이다보니, 테스트 코드 작성하는 것이 어려웠습니다.
비즈니스 로직
을테스트 코드
로 문서화 하고 싶었는데, 비즈니스 로직이 대부분 private 함수 내에 있어서, 테스트 코드 작성하는데 어려움이 있었습니다. 공부해본 결과, 리플렉션으로 private 함수를 테스트 할 수 있다고 하지만, 리플랙션 사용은 지양하는 것이 좋고, 만약 private를 테스트 하고 싶으면, 그건클래스로 분리하라는 신호
라는 글을 보고, 도메인 모델 클래스 만들어서 해결하면 되겠다라는 생각을 했습니다.불편함 3. private 함수이다보니, 로그 AOP 적용이 어려웠습니다.
What
OrderForm
이라는 도메인 모델을 만들어서 OrderService의placeOrderInAdvance
의 일부 로직에 대한 책임을 부여하고,OrderForm
의 단위테스트를 작성하여 비즈니스 로직을 문서화 할 수 있도록 함.OrderForm
->OrderFormDto
로 이름 변경OrderService
에서OrderFormDto
대신OrderForm
사용하기validateHasDealProductUuid
책임을OrderService
->OrderForm
으로 수정validateOrderQuantityInMaxOrderQuantityPerOrder
책임을OrderService
->OrderForm
preValidateOrderQuantityInInventory
책임을OrderService
->OrderForm
으로 수정determineRealOrderQuantity
책임을OrderService
->OrderForm
으로 수정