Skip to content
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

Merged
merged 16 commits into from
Sep 15, 2023

Conversation

cookienc
Copy link

@cookienc cookienc commented Sep 14, 2023

안녕하세요 에밀! 오랜만이네요. 미션 제출합니다!
아직은 Reflection을 어떻게 추상화할 지 몰라 class 분리만 했습니다.
이번 미션 잘 부탁드립니다🙇‍♂️🙇🙇‍♀️!
이번 PR 범위는 여기까지 입니다.

@cookienc cookienc self-assigned this Sep 14, 2023
Copy link
Member

@CFalws CFalws left a 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) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오호 valueOf 안쓰시고 정팩메를 정의하셨네요 ! 👍

Copy link
Author

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("처리 할 수 없는 요청 입니다.");
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

HandlerExecutions에서 해당 메서드와 uri가 없으면 예외를 반환하네요?? 와우.. Optional, Null을 사용하지 않고 해당 방식으로 구현하신 이유가 무엇일까요?

Copy link
Author

@cookienc cookienc Sep 15, 2023

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을 리턴하도록 변경해보겠습니다~

Comment on lines 21 to 23
final Constructor<?> constructor = controller.getDeclaredConstructor();
final Object instance = constructor.newInstance();
return (ModelAndView) method.invoke(instance, request, response);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

매번 같은 인스턴스인데 요청이 들어올 때마다 새로운 인스턴스를 생성하면 객체 생성 비용에서 단점이 있다고 생각합니다.
혹시 이렇게 구현하신 이유가 있으실까요?

Copy link
Author

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));
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

생성 책임을 분리하셨군요 👍

@cookienc
Copy link
Author

리뷰 반영해서 수정했습니다:)

Copy link
Member

@CFalws CFalws left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

리뷰 반영하신거 확인했습니다!
2단계에서 보시죠~

@CFalws CFalws merged commit 092f388 into woowacourse:cookienc Sep 15, 2023
1 check failed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants