[ClassFlix] EP 3. 도메인 설계와 테이블 생성
Project/ClassFlix

[ClassFlix] EP 3. 도메인 설계와 테이블 생성

목차 (클릭시 해당 목차로 이동)


     

     

     

     

    프로젝트에 필요한 도메인을 설계해본다.

     

    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)