목차 (클릭시 해당 목차로 이동)
프로젝트에 필요한 도메인을 설계해본다.
1. 실세계 요구사항 분석
- 먼저 실제 세계에서 어떤 시스템을 구축할 것인지 말로 듣는 것 처럼 시작합니다.
"우리는 회원관리, 강의정보등록, 후기작성 웹사이트를 구축할 예정입니다.
웹 사이트에 접속한 클라이언트는 회원등록 (자신의 이름, 나이, 성별, 직업) 을 등록할 수 있습니다.
그리고 강의정보 (강의 이름, 강의자 이름 등)을 등록할 수 있습니다.
또한, 강의를 선택하고 회원을 선택하고 후기를 남길 수 있습니다."
2. 개발을 위한 요구사항 분석
도메인
회원 : 이름, 나이, 성별, 직업
강의 : 강의이름, 강의자이름, 썸네일, 사이트이름, 실제강의URL
후기 : 회원정보, 비밀번호, 별점, 내용, 작성한날짜
요구사항
- 회원 등록, 조회, 수정, 삭제
- 강의 등록, 조회, 수정, 삭제
- 회원이 어떤 강의의 후기를 (등록, 조회, 수정, 삭제)할 수 있다.
단, 삭제시에는 작성시 입력한 비밀번호를 입력해야 가능하다.
3. 모델 개념적 설계
4. 엔티티 설계
5. 도메인 코드 작성
Member
package dongho.classflix.domain;
import lombok.Getter;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
@Entity
@Getter
public class Member {
@Id
@GeneratedValue
@Column(name = "member_id")
private Long id;
private String userName;
private int age;
@Enumerated(EnumType.STRING)
private Gender gender;
private String career;
@OneToMany(mappedBy = "member")
private List<Review> reviews = new ArrayList<>();
}
package dongho.classflix.domain;
public enum Gender {
MALE, FEMALE
}
Lecture
package dongho.classflix.domain;
import lombok.Getter;
import javax.persistence.*;
import java.awt.*;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import static javax.persistence.CascadeType.*;
@Entity
@Getter
public class Lecture {
@Id
@GeneratedValue
@Column(name = "lecture_id")
private Long id;
private String lectureName;
private byte[] RepresentImage;
private String teacherName;
private String siteName;
private URI uri;
private String content;
@OneToMany(mappedBy = "lecture", cascade = ALL)
private List<Review> reviews = new ArrayList<>();
}
Review
package dongho.classflix.domain;
import lombok.Getter;
import javax.persistence.*;
import javax.swing.*;
import java.time.LocalDateTime;
import static javax.persistence.FetchType.*;
@Entity
@Getter
public class Review {
@Id
@GeneratedValue
@Column(name = "review_id")
private Long id;
@ManyToOne(fetch = LAZY)
@JoinColumn(name = "member_id")
private Member member;
private JPasswordField password;
private String content;
@Enumerated(EnumType.STRING)
private Star star;
@ManyToOne(fetch = LAZY)
@JoinColumn(name = "lecture_id")
private Lecture lecture;
private LocalDateTime reviewDate;
}
package dongho.classflix.domain;
public enum Star {
ONE, TWO, THREE, FOUR, FIVE
}
6. 테이블 생성 (ddl auto)
'Project > ClassFlix' 카테고리의 다른 글
[ClassFlix] EP 6. view 페이지 제작과 컨트롤러 연결 - 2 (0) | 2021.04.29 |
---|---|
[ClassFlix] EP 5. view 페이지 제작과 컨트롤러 연결 - 1 (0) | 2021.04.27 |
[ClassFlix] EP 4. domain, repository, service 계층별 설계 및 구현 (0) | 2021.04.26 |
[ClassFlix] EP 2. 개발환경 세팅 (0) | 2021.04.21 |
[ClassFlix] EP 1. 개발 계획 (0) | 2021.04.14 |