-
Notifications
You must be signed in to change notification settings - Fork 264
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
[레거시 코드 리팩터링 - 1단계] 더즈(이동규) 미션 제출합니다. #221
Conversation
entity.setId(resultSet.getLong(KEY_COLUMN_NAME)); | ||
entity.setCreatedDate(resultSet.getObject("created_date", LocalDateTime.class)); | ||
return entity; | ||
return new TableGroup( |
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.
레거시 코드 도메인을 수정하면서 정말 많은 부분이 바뀌는게 느껴지네요 ㅋㅋㅋ
|
||
import kitchenpos.domain.Menu; | ||
|
||
public class MenuResponse { |
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.
이야...dto 가 엄청나가 많아졌네요. 일일이 확인하면서 만드는게 힘들었을텐데 수고하셨습니다.
|
||
if (Objects.equals(OrderStatus.COMPLETION.name(), savedOrder.getOrderStatus())) { | ||
throw new IllegalArgumentException(); | ||
throw new IllegalArgumentException("완료 주문은 상태를 변경할 수 없습니다."); |
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.
개인적으로 레거시를 많이 고치는걸 고민을 해봐야한다는 입장인데 예외 메시지 추가는 꼭 필요해 보이네요
); | ||
} | ||
|
||
@DisplayName("메뉴 그룹 목록을 조회한다..") |
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.
마침표가 두개네요 ㅋㅋㅋ
private static final String MENU_NAME = "앙념 두마리 치킨"; | ||
|
||
private final List<MenuProductRequest> menuProductRequests = List.of( | ||
new MenuProductRequest(Product.후라이드, 2), |
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.
이거 픽스쳐 좋긴한데 스태틱 임포트 까지 하니까 진짜 도메인 클래스를 사용한건지 깜짝 놀라게 되네요.
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.
그럴 수 있겠네요! ProductId.후라이드
처럼 ID 값이라는 걸 명시하는 게 좋겠네요
.containsOnly(Product.후라이드, Product.양념치킨), | ||
() -> assertThat(menuProducts) | ||
.extracting("quantity") | ||
.containsOnly(Product.후라이드, Product.양념치킨) |
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.
꼼꼼한 테스트 좋습니다. 든든하네요.
@Test | ||
void create() throws Exception { | ||
// given | ||
MenuResponse menuResponse = new MenuResponse( |
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.
dto 생성에 대해서 좀 더 깔끔하게 할 방법이 없을까는 고민해볼만 하네요. 저도 지금은 딱히 더 좋은 방법이 생각나진 않는거 같아요.
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.
안녕하세요 더즈 ㅋㅋㅋ 마지막 미션을 같이하게 됐네요.
도메인으로 데이터를 주고받던 방식을 dto 로 전환한게 인상적이었습니다. 저는 레거시라고 감정이입하면 뭔가 무서워서 못하겠더라고요 ㅋㅋ
전반적으로 요구사항 잘 지켜주셨고 컨트롤러 테스트까지 꼼꼼하게 구현이 잘된거 같아서 1단계는 여기서 어프루브 하겠습니다. 2단계에서 봐요!
안녕하세요 조조그린!! 리뷰어로 만나니 새롭네요.
스모디 코드만 리뷰 받다가 미션 코드 리뷰도 받고 조조그린의 코드 리뷰를 많이 받을 수 있어서 좋은 것 같습니다.
테스트에서 @nested 사용
같은 메서드의 여러 흐름을 테스트 한다는 것을 알아보기 쉽게 하기 위해 @nested를 적극 활용하였습니다. 이렇게 하니 공통적인 given 설정도 가능하고 가독성도 좋아진 것 같은데 조조그린은 어떻게 생각하시나요?
PlatformTransactionManager
로 롤백 처리@nested의 부작용이 중첩 클래스 내부에는
@Transactional
롤백이 먹히지 않는다는 것이었어요. 그래서 모든 Service 레이어 테스트 클래스들이 상속받는 부모 클래스인@ServiceTest
를 만들어서 직접 롤백을 하도록 했어요.실제 비즈니스 코드에서는 격리를 위해 다른 방법을 쓰겠지만 현재는 트랜잭션 롤백으로 간단히 격리를 구현하고 싶어서 위처럼 구현하였습니다.
프로덕션 코드는?
프로덕션 코드는 DTO를 사용하도록 변경한 것과 예외 메시지를 구체화한 것밖에 건드린 게 없어요. 2단계부터 본격적인 프로덕션 리팩터링을 진행하려고 합니다.