-
Notifications
You must be signed in to change notification settings - Fork 302
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
[MVC 구현하기 - 1단계] 에단(김석호) 미션 제출합니다. #426
Conversation
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.
안녕하세요 에단 ~
오랜만입니다
2단계가 점진적인 리팩토링이라 직접 경험해보시는 게 배움에 도움이 될 것 같아 머지를 하려했는데
궁금한 게 있어 일단 request change 하겠습니다 ^_^
GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE | ||
GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE; | ||
|
||
public static RequestMethod from(final String method) { |
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.
오호 valueOf 안쓰시고 정팩메를 정의하셨네요 ! 👍
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.
예외 메세지를 custom 하려고 이렇게 했습니다. 다만 모디 글을 보니 switch 문도 나쁘지 않을 것 같아서 다음단계에서 바꿔보려고 합니다!
return handlerExecutions.get(targetKey); | ||
} | ||
|
||
return 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.
HandlerExecutions에서 해당 메서드와 uri가 없으면 예외를 반환하네요?? 와우.. Optional, Null을 사용하지 않고 해당 방식으로 구현하신 이유가 무엇일까요?
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.
처리할 수 없는 메서드면 예외를 반환하는게 좋다고 생각해서 이렇게 구현했습니다.
2단계 미션을 보니 여러 HandlerMapping이 등장하는데요. 이럴 경우에는 각각의 handlerMapping에서 예외처리가 분산된다는 문제점이 발생할 것 같습니다! 이런 문제는 2단계하면서 직접 겪어보고 null이나 Optional을 리턴하도록 변경해보겠습니다~
final Constructor<?> constructor = controller.getDeclaredConstructor(); | ||
final Object instance = constructor.newInstance(); | ||
return (ModelAndView) method.invoke(instance, request, response); |
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.
크게 고민하지 못했던것 같아요. 수정해서 반영하겠습니다
@@ -21,9 +23,19 @@ public AnnotationHandlerMapping(final Object... basePackage) { | |||
|
|||
public void initialize() { | |||
log.info("Initialized AnnotationHandlerMapping!"); | |||
final Map<HandlerKey, HandlerExecution> handlerExecutions = Objects.requireNonNull(HandlerExecutionFactory.create(basePackage)); |
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.
리뷰 반영하신거 확인했습니다!
2단계에서 보시죠~
안녕하세요 에밀! 오랜만이네요. 미션 제출합니다!
아직은 Reflection을 어떻게 추상화할 지 몰라 class 분리만 했습니다.
이번 미션 잘 부탁드립니다🙇♂️🙇🙇♀️!
이번 PR 범위는 여기까지 입니다.