3단계 - 수강신청(DB 적용)
핵심 학습 목표
•
2단계에서 구현한 객체 구조(도메인 구조)를 가능한 유지하면서 DB 테이블과 매핑한다.
•
성능보다 도메인 객체에 로직 구현하는 것을 목표로 연습한다.
◦
객체 구조를 유지하기 위해 여러 번의 DB 쿼리를 실행해도 괜찮다.
수강 신청 기능 요구사항 - 2단계와 같다
•
과정(Course)은 기수 단위로 여러 개의 강의(Session)를 가질 수 있다.
•
강의는 시작일과 종료일을 가진다.
•
강의는 강의 커버 이미지 정보를 가진다.
•
강의는 무료 강의와 유료 강의로 나뉜다.
•
강의 상태는 준비중, 모집중, 종료 3가지 상태를 가진다.
•
강의 수강신청은 강의 상태가 모집중일 때만 가능하다.
•
강의는 강의 최대 수강 인원을 초과할 수 없다.
프로그래밍 요구사항
•
앞 단계에서 구현한 도메인 모델을 DB 테이블과 매핑하고, 데이터를 저장한다
피드백
리뷰어 :
도메인 객체와 DB 매핑하느라 노력한 흔적이 보이네요.
DB 매핑 객체를 도메인 객체로 변환하는 부분도 보이네요.
도메인 객체와 DB 매핑 객체 관련해 피드백 남겨봤어요.
•
리뷰어 : 메서드 이름을 putStudent, removeStudent과 정하면 자료구조에 데이터를 추가하고 제거하는 느낌이 든다. 이 보다는 도메인 의도가 드러나도록 enroll(수강신청), cancel(수강취소)와 같은 이름으로 구현하면 어떨까?
public void changeStudents(Students students) {
this.students = students;
}
public void removeStudent(NsUser nsUser) {
Java
복사
◦
생각정리 : 자료구조 데이터를 추가하고 제거한다는 느낌보다는, 동작에 대한 초점으로 함수명을 작명하도록 해야겠다.
public void enroll(NsUser nsUser) {
checkValidation();
students.enroll(nsUser);
}
public void cancel(NsUser nsUser) {
students.removeEntity(nsUser);
}
Java
복사
•
리뷰어 : 수강신청한 학생의 목록은 SessionUserMapping을 가지는 것은 어떨까?
private List<NsUser> users = new ArrayList<>();
Java
복사
◦
생각정리 : 어차피 수강에 대한 데이터는 SessionUserMapping이 갖고 있으니, 해당하는 객체로 옮기는 것이 맞다고 생각된다.
private List<SessionUserMapping> users = new ArrayList<>();
Java
복사
•
git링크 :
•
출처 :