-
Notifications
You must be signed in to change notification settings - Fork 247
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
base: suzhanlee
Are you sure you want to change the base?
Step2 #353
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단계 잘 진행해주셨습니다~
코멘트 남겨 놓았는데 확인 부탁드려요~
마지막까지 화이팅입니다~
@@ -28,6 +38,14 @@ public Course(Long id, String title, Long creatorId, LocalDateTime createdAt, Lo | |||
this.updatedAt = updatedAt; | |||
} | |||
|
|||
public void addSession(Session session) { |
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.
SessionService의 save하는 부분에 course에 연관관계를 맺어주기 위해 addSession을 했는데, sevice에서 add를 해도 될까요?
과정(Course)은 기수 단위로 운영하며, 여러 개의 강의(Session)를 가질 수 있다.
과정이 여러개의 강의를 가질수 있으므로, 과정 -> 강의
를 관리한다라는 관점으로 저도 보고있으므로
잘 구현해주셨습니다!
private List<Session> sessions = new ArrayList<>(); | ||
|
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 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); |
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.
의존성의 흐름이 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( |
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.
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( |
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.
"."이 많아 질때 의심해보면 좋을것 같아요.
- 다른 도메인 단위테스트에서 진행해야하는거 아닌가?
- 객체에게 물어 봐서 검증할 수 없을까?
- 검증 꼭 필요한검증인가?
- 설계가 잘못된걸까? (지금 구조가 잘못되었다는것은 아닙니다~)
step2 구현해봤습니다!
잘 구현한지 모르겠네요...
질문이 있습니다!
SessionService의 save하는 부분에 course에 연관관계를 맺어주기 위해 addSession을 했는데, sevice에서 add를 해도 될까요?
서비스 코드에서 뭔가 도메인에서 해야할 로직을 수행한 것 같아서 여쭤봅니다!
감사합니다~