1-2. 회원 엔티티 분석
1.회원(Member)엔티티
회원(Member)
id: Long
-회원엔티티에 공통속성은 id가 다 있다.
-id=pk generating 해주는 id값 데이터베이스
pk값(id값)은 long 값으로 해놓았다.
name: String
-이름(string)
address: Address
-임베디드 타입(내장값타입)인 주소(Address : 설계도 하기 그림참고-value type address)
orders : List
-그리고 주문(orders) 리스트를 가진다.
2.주문 엔티티
주문(Order)
id
member : Member(회원정보)
orderItems : list (주문목록)
delivery : Delivery(배송정보)
orderDate : Date(주문한날짜)
status : OrderStatus(주문상태-주문,취소 등등)
-한 번 주문시 여러 상품을 주문할 수 있으므로 주문과 주문상품(OrderItem)은 일대다 관계 다.
-주문은 상품을 주문한 회원과 배송 정보, 주문 날짜, 주문 상태(status)를 가지고 있다.
-주문 상태는 열 거형을 사용했는데 주문(ORDER), 취소(CANCEL)을 표현할 수 있다.
3.주문상품 엔티티
주문상품(OrderItem)
-주문한 상품 정보와 주문 금액(orderPrice), 주문 수량(count) 정보를 가지고 있다.
(보통 OrderLine, LineItem 으로 많이 표현한다.)
-주문상품을 추가한 다른 이유는 한번 주문시 여러 개의 상품을 담을 수 있는데
주문시점시 주문한 상품의 개수 및 주문한 상품 가격정보가 필요하기 때문이다.
4.배송 엔티티
배송(Delivery)
id
order : order(주문정보, 배송지주소 아님)
address : Address(배송지주소-value type 값타입 주소를 재활용)
status : DeliveryStatus(배송현황)
-배송(Delivery): 주문시 하나의 배송 정보를 생성한다. 주문과 배송은 일대일 관계다.
-주문시 하나의 배송 정보를 생성한다. 주문과 배송은 일대일 관계다.
5.상품엔티티
상품(Item)
id
name (상품이름)
price: int (상품가격)
stockQuantity (상품재고)
categories: List(어느 카테고리에 매핑 되어 있는지에 대한 정보)
상품엔티티와의 상속관계
-상속관계로 Album, Book, Movie들이 있고,
개별속성들이 상속관계로 다음과 같이 표현되어 있다.
Album - artist, etc
Book - author, isbn
Movie - director, actor
-이름, 가격, 재고수량(stockQuantity)을 가지고 있다.
상품을 주문하면 재고수량이 줄어든다.
상품의 종류로는 도서, 음반, 화가 있는데 각각은 사용하는 속성이 조금씩 다르다.
6. 카테고리엔티티
카테고리(Category)
id
name
items: List(카테고리가 가지고 있는 리스트)
parent: Category
(계층구조로 되어 있다. 내 부모가 누구인데, 자식(속성)은 여러개의 구조로 되어 있다라는 형태, 부모는 한개)
child: List
-카테고리(Category): 상품과 다대다 관계를 맺는다. parent, child로 부모, 자식 카테고리를
연결한다.
7. 주소엔티티
주소(Address)
-값 타입(임베디드 타입)이다. 회원과 배송(Delivery)에서 사용한다.
설계구성도는 JPA에서 다룰 수 있는 모든관계개념들을 모두 넣어두었다.
1. Member와 Order - 1대 다 관계
2. Order랑 delivery - 1대 1 관계
3. Order와 OrderItem - 1대 다 관계
4. OrderItem과 Item - 다대 1 관계
5. Item과 Album,Book,Movie - 상속관계
6. Category와 Item - 다대 다 관계
실무에서 사용하기 애매한 것들
-Category와 item의 다대 다 관계(JPA@다대다관계)는 실제운영에서 사용하면 안된다.
1대 다 또는 다대 1 관계로 풀어내야 한다.
-Member와 Order 1대 다 관계가 아닌, 시스템적으로는 동등한 관계로 보고 고민해야 한다.
-회원을 통해서 주문이 일어난다가 아니라, 주문을 생성할 때 Member가 필요하다라고 생각을 해야 한다.
-쿼리가 일어날 때도 주문 내역이 필요할 때 멤버를 찾아서 거기에 있는 주문 리스트를 가져 오는 것이 아니라,
order에서도 필터링 조건에 멤버가 들어간다.
-그래서 사실상 1대 다의 컬렉션은 필요없다..
자세한 것은 기본편강의에서 다루었다.
참고
회원이 주문을 하기 때문에, 회원이 주문리스트를 가지는 것은 얼핏 보면 잘 설계한 것 같지만,
객체 세상은 실제 세계와는 다르다. 실무에서는 회원이 주문을 참조하지 않고, 주문이 회원을 참조하는 것으로 충분하다. 여기서는 일대다, 다대일의 양방향 연관관계를 설명하기 위해서 추가했다.
'신입개발자로 취업하기까지 > JPA쇼핑몰기능구축' 카테고리의 다른 글
20200506 도메인분석설계_도메인모델과 테이블설계_2-4 (0) | 2020.05.19 |
---|---|
20200506 도메인분석설계_도메인모델과 테이블설계_2-3 (0) | 2020.05.18 |
20200505 도메인분석설계_도메인모델과 테이블설계_2-1 (0) | 2020.05.12 |
20200505 도메인분석설계_요구사항분석_1 (0) | 2020.05.11 |
20200501 프로젝트 환경설정_JPA와 DB설정 및 동작확인_5-3 (0) | 2020.05.09 |