Search
Duplicate

2. [클린 코드 with Java] 2단계 - 2단계 - 수강신청(도메인 모델)

링크
점수
⭐️⭐️⭐️⭐️
완료일
2023/06/18
상태
완료
유형
인강

학습 관리 시스템(LMS)

넥스트스텝은 재직자를 대상으로 소프트웨어 교육을 진행하는 교육 기관이다.
2018년 교육 사업을 시작했다.
교육 사업을 시작하며 자체적으로 학습 관리 시스템을 개발해 수강생을 모집하고, 컨텐츠를 관리하고 있다.

수강 신청 기능 요구사항

과정(Course)은 기수 단위로 여러 개의 강의(Session)를 가질 수 있다.
강의는 시작일과 종료일을 가진다.
강의는 강의 커버 이미지 정보를 가진다.
강의는 무료 강의와 유료 강의로 나뉜다.
강의 상태는 준비중, 모집중, 종료 3가지 상태를 가진다.
강의 수강신청은 강의 상태가 모집중일 때만 가능하다.
강의는 강의 최대 수강 인원을 초과할 수 없다.

프로그래밍 요구사항

DB 테이블 설계 없이 도메인 모델부터 구현한다.
도메인 모델은 TDD로 구현한다.
단, Service 클래스는 단위 테스트가 없어도 된다.
다음 동영상을 참고해 DB 테이블보다 도메인 모델을 먼저 설계하고 구현한다.

피드백

리뷰어 : 도메인 객체를 작은 단위로 분리하고, 지금까지 연습한 부분을 잘 적용해 구현했네요.  요구사항을 잘못 이해한 부분이 있고, 컨벤션 관련한 피드백 좀 남겨 봅니다.
if (students.getSize() > MAX_STUDENTS) { throw new IllegalArgumentException(MAX_STUDENT_EXCEPTION); }
Java
복사
생각정리 : session.java 객체에서 진행 중인 부분을 students에서 유호성 체크 하는게 맞다고 생각된다.
if (studentsMap.size() > MAX_STUDENTS) { throw new IllegalArgumentException(MAX_STUDENT_EXCEPTION); }
Java
복사
리뷰어 : enum에도 메시지를 보내는 방식으로 구현하면 어떨까?
if (!SessionType.RECRUITING.equals(status)) {
Java
복사
생각정리 : 객체에서 분기처리하는게 아닌 enum에 질문하는 방식으로 객체에서 유효성체크를 하는것이 좀 더 깔끔하게 정리하는 방법
package nextstep.courses.domain; public enum SessionType { READY, RECRUITING, END; public static boolean isRecruiting(SessionType sessionType) { return sessionType == RECRUITING; } }
Java
복사
gitf링크 :
출처