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

[DI - Step 1] 효오 미션 제출합니다. #11

Merged
merged 16 commits into from
Nov 7, 2019

Conversation

hyojaekim
Copy link

안녕하세요! 효오라고 합니다.

미션을 진행하면서 궁금한게 있습니다.
BeanScanner와 BeanFactory를 생성하는 위치에 대해 많이 고민했었습니다.
현재는 DispatcherServlet을 생성해주는 SlippWebApplicationInitializer에 스캐너와 팩터리를 생성해주고 있는데 위치가 적절한지 궁금합니다!

많은 지적 부탁드립니다!

Copy link

@kingbbode kingbbode left a comment

Choose a reason for hiding this comment

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

안녕하세요!
요구사항 잘 구현해주셔서 바로 머지하겠습니다 👍
피드백 몇가지도 남겨두었습니다 :) 확인 부탁드려요.

}
return createInstance(injectedConstructor);
} catch (Exception e) {
logger.error("### Bean create fail : {}", e.getMessage());

Choose a reason for hiding this comment

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

예외를 추적하기 위한 정보가 e.getMessage() 면 충분할까요? 계획한 수준의 예외가 아니라면 Exception 상태를 보존해주면 좋을 것 같아요.

https://rules.sonarsource.com/java/tag/error-handling/RSPEC-1166
https://www.slipp.net/questions/350

Comment on lines 72 to 73
putBean(parameterType);
parameters.add(getBean(parameterType));

Choose a reason for hiding this comment

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

putBean, getBean 의 흐름이 어색해보이네요. putBean 메서드 자체의 의미는 충분히 있고 getBean 메서드에도 자체의 의미가 분명 있습니다. 그러나 createInstance 에서는 최적화되어 있기보다는 방어 로직으로 putBean을 사용하여 불필요할 수도 있는 행위를 수행하는 코드이지는 않을까요? 메서드의 행위에 대한 최적화가 더 의미있지 않을까 생각해봅니다 :)

Copy link
Author

Choose a reason for hiding this comment

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

getBean 메소드에서 존재하지 않는 클래스 타입인 경우 만들어서 가져오도록 로직을 추가했습니다!

Comment on lines 24 to 25
private final UserService userService;
private UserDao userDao;

Choose a reason for hiding this comment

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

final은 어떤 기준으로 작성 되었나요?

Copy link
Author

Choose a reason for hiding this comment

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

빼먹은 부분이 있었습니다! 감사합니다.

@kingbbode kingbbode self-requested a review October 31, 2019 15:42
Copy link

@kingbbode kingbbode left a comment

Choose a reason for hiding this comment

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

안녕하세요!
요구사항 구현이 잘 되긴 하였으나 기능상의 결점이 보여 피드백을 남겼습니다 :)
확인 부탁드려요!


private void putBean(Class<?> preInstanticateBean) {
if (!beans.containsKey(preInstanticateBean)) {
beans.put(preInstanticateBean, createBean(preInstanticateBean));
Copy link

@kingbbode kingbbode Oct 31, 2019

Choose a reason for hiding this comment

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

(장황하게 작성하여 코멘트를 수정합니다!)
의도한 Bean 의 유형과 범위에서만 생성되고 있나요?
유형 : Controller, Service, Repository Annotation 이 작성된 class
범위 : package

이에 대한 테스트케이스도 작성이 되면 좋겠어요.

@kingbbode
Copy link

처음에 안보였던 케이스가 나중에 보여 상태를 변경하였습니다 :)
추가로 현재 BeanFactory 테스트가 작성하신 기능에 비해 많이 부족한 점이 보이는 것 같은데요. 구현하신 요구사항들이 모두 드러날 수 있는 테스트 부탁드려요.
시간 여유가 되신다면 Reflection 을 사용하지 않고 BeanFactory 에 대한 테스트도 작성해보시는 것을 추천드려요 :)(필수는 아닙니다!)

@hyojaekim
Copy link
Author

안녕하세요!

예외를 추적하기 위한 정보가 e.getMessage() 면 충분할까요? 계획한 수준의 예외가 아니라면 Exception 상태를 보존해주면 좋을 것 같아요.
습관적으로 e.getMessage() 써왔는데 위와 같은 피드백으로 예외에 대한 많은 고민 해봐서 좋았습니다!

@kingbbode kingbbode assigned kingbbode and unassigned kingbbode Nov 7, 2019
@kingbbode
Copy link

말씀드린 의도가 잘못 전달된 것 같네요 :)

@Service
public class TestService {
    public TestService(A a) {
        ...
    }
}

public class A {
}

A class 의 객체는 생성되면 안됩니다 :)

Copy link

@kingbbode kingbbode left a comment

Choose a reason for hiding this comment

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

의도가 잘못 전달된 듯 하여 코멘트를 조금 더 상세하게 남겼습니다!
확인 부탁드려요 :)

}

if (!preInstanticateBeans.contains(requiredType)) {
throw new IllegalArgumentException("해당 클래스를 찾을 수 없습니다.");

Choose a reason for hiding this comment

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

조금 더 상세한 로그를 남겨주는 것이 추적하기 쉬울 것 같아요 :)

Copy link

@kingbbode kingbbode left a comment

Choose a reason for hiding this comment

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

내용 확인하여 머지합니다!
구현 잘 해주셔서 감사합니다 :) 👍

@kingbbode kingbbode merged commit f9d0e45 into woowacourse:hyojaekim Nov 7, 2019
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