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

Step2 #353

Open
wants to merge 24 commits into
base: suzhanlee
Choose a base branch
from
Open

Step2 #353

wants to merge 24 commits into from

Conversation

suzhanlee
Copy link

step2 구현해봤습니다!

잘 구현한지 모르겠네요...

질문이 있습니다!

SessionService의 save하는 부분에 course에 연관관계를 맺어주기 위해 addSession을 했는데, sevice에서 add를 해도 될까요?
서비스 코드에서 뭔가 도메인에서 해야할 로직을 수행한 것 같아서 여쭤봅니다!

감사합니다~

Copy link

@wooobo wooobo left a comment

Choose a reason for hiding this comment

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

안녕하세요 수찬님!

2단계 잘 진행해주셨습니다~
코멘트 남겨 놓았는데 확인 부탁드려요~
마지막까지 화이팅입니다~

@@ -28,6 +38,14 @@ public Course(Long id, String title, Long creatorId, LocalDateTime createdAt, Lo
this.updatedAt = updatedAt;
}

public void addSession(Session session) {
Copy link

Choose a reason for hiding this comment

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

SessionService의 save하는 부분에 course에 연관관계를 맺어주기 위해 addSession을 했는데, sevice에서 add를 해도 될까요?

과정(Course)은 기수 단위로 운영하며, 여러 개의 강의(Session)를 가질 수 있다.
과정이 여러개의 강의를 가질수 있으므로, 과정 -> 강의를 관리한다라는 관점으로 저도 보고있으므로
잘 구현해주셨습니다!

Comment on lines +20 to +21
private List<Session> sessions = new ArrayList<>();

Copy link

Choose a reason for hiding this comment

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

Suggested change
private List<Session> sessions = new ArrayList<>();
private List<Session> sessions;
private Course(Long id, String title, Long creatorId, LocalDateTime createdAt, LocalDateTime updatedAt, List<Session> sessions) {
this.id = id;
this.title = title;
this.creatorId = creatorId;
this.createdAt = createdAt;
this.updatedAt = updatedAt;
this.sessions = sessions;
}
public Course(Long id, String title, Long creatorId, LocalDateTime createdAt, LocalDateTime updatedAt) {
this.id = id;
this.title = title;
this.creatorId = creatorId;
this.createdAt = createdAt;
this.updatedAt = updatedAt;
this.sessions = new ArrayList<>();
}

저는 생성자를 다양하게 사용하기 위해
초기화는 생성자에서 해줄것 같아요.

생성자가 다양하면, 테스트 할때
assSession 같은 메소드를 사용하지 않고도
바로 Course를 생성할 수 있는게 장점인것 같아요.

Session session = request.toEntity();
course.addSession(session);
courseService.saveCourse(course);
return sessionRepository.save(session);
Copy link

Choose a reason for hiding this comment

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

서비스 코드에서 뭔가 도메인에서 해야할 로직을 수행한 것 같아서 여쭤봅니다!

이부분을 말씀하시는 걸까요?
그렇다면, 저는 잘 구현하셨다고 생각합니다.
(어떤 코드가 "도메인에서 해야할 로직"이라고 생각하시는건지 궁금해요~)

Copy link

Choose a reason for hiding this comment

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

의존성의 흐름이 Course -> Session이라고 보았을때,

저는 이러한 접근도 가능할것 같아요.

public class CourseService {

    private final CourseRepository courseRepository;
    private final SessionService sessionService;

    public void addSession1(request) {
        Course course = courseRepository.findById(request.getId());
        course.addSession(request.toEntity());
        courseRepository.save(course);
    }
    // OR
    public void addSession2(request) {
        Course course = courseRepository.findById(request.getId());
        course.addSession(request.toEntity());
        sessionService.save(course.sessions());
    }

이렇게 해보았을때 개인적으론, 로직의 흐름이 좀 더 자연스러워 보여서요~
수정을 위한 피드백 보다는 관점 공유정도로 봐주셔도 됩니다~

// then
Session findSession = sessionRepository.findById(request.getSessionId());

assertThat(findSession.getEnrollment().getPayments()).contains(
Copy link

Choose a reason for hiding this comment

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

Suggested change
assertThat(findSession.getEnrollment().getPayments()).contains(
assertThat(findSession.getEnrollment().getPayments()).contains(

객체지향 생활체조 원칙

  • 규칙 4: 한 줄에 점을 하나만 찍는다.

findSession.payment_있어?(new SessionPayment(new NsUser(0L, "tempId", "5678", "이수찬", "email"))
이런것은 어떨까요?

assertThat(findSession.getEnrollment().getPayments()).contains(
new SessionPayment(new NsUser(0L, "tempId", "5678", "이수찬", "email"), PaymentType.COMPLETED),
new SessionPayment(new NsUser(1L, "wlscww", "1234", "이수찬", "email"), PaymentType.COMPLETED));
assertThat(findSession.getEnrollment().getParticipants().getParticipants()).contains(
Copy link

Choose a reason for hiding this comment

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

Copy link

Choose a reason for hiding this comment

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

"."이 많아 질때 의심해보면 좋을것 같아요.

  • 다른 도메인 단위테스트에서 진행해야하는거 아닌가?
  • 객체에게 물어 봐서 검증할 수 없을까?
  • 검증 꼭 필요한검증인가?
  • 설계가 잘못된걸까? (지금 구조가 잘못되었다는것은 아닙니다~)

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.

2 participants