728x90
1.도메인분석 설계
목차
- 1.요구사항 분석
- 2.도메인 모델과 테이블 설계
- 3.엔티티 클래스 개발1
- 4.엔티티 클래스 개발2
- 5.엔티티 설계시 주의점
1.요구사항 분석
- 회원기능
- 회원등록
- 회원조회
- 상품기능
- 상품등록
- 상품수정
- 상품조회
- 주문기능
- 상품주문
- 주문내역조회
- 주문취소
- 기타요구사항
- 상품은 제고관리가 필요하다.
- 상품의 종류는 도서,음반,영화가 있다.
- 상품을 카테고리로 구분할수 있다.
- 상품주문시 배송정보를 확인할수 있다.2.도메인 모델과 테이블 설계
- 회원,주문,상품의 관계
- 회원은 여러상품을 주문할수있다.
- 주문할때 여러상품을 선택할수 있으므로 주문과 상품은 다대다 관계이다
- 다대다 관계는 사용하지 않는다 그래서 주문상품을 넣는다
- 주문상품을 넣어서 다대다 관계를 다대일,일대다 관계로 풀어낸다
- 상품분류
- 상품은 도서,음반,영화로 구분되는데 상품이라는 공통속성을 사용하므로 상속구조로 표현한다회원 엔티티 분석
- 회원(Member) : 이름과 임베디드 타입인 주소(Address), 그리고 주문(Orders)리스트를 가진다
- 주문(Order) : 주문과 주문상품(OrderItem) 은 일대다관계
- 회원,배송정보,주문날짜,주문상태(status)
- status는 Order(주문) cancel(취소) 를 가진다
- 주문상품(OrderItem) : Order 와 Item의 다대다 관계를 일대다,다대일로 바꾸어준다
- 주문금액,주문수량
- 상품(Item) : 이름,가격,재고수량을 가지고있다
- 상품을 주문할시 재고수량이 줄어든다
- 상품종류로는 도서,음반,영화가 있는데 각각 사용하는 속성이 조금씩 다르다
- 참고
- 실무에서는 회원이 주문을 참조하지 않고 주문이 회원을 참조하는것으로 충분하다
임베디트 타입의 주소? : 새로운 값 타입을 직접 정의하는거다 회원이 상세한 데이터를 그대로 가지는것은 객체지향적이지 않으며 응집력이 많이 떨어진다
- 실무에서는 회원이 주문을 참조하지 않고 주문이 회원을 참조하는것으로 충분하다
@Embeddable을 이용해서 클래스에 새로 만든다
@Embeddable
public class Period{
@Column(name="매핑할 컬럼")
private String city;
private String street;
private String zipcode;
...
}
- 값타입
- 값 타입들은 재사용이 높고 응집력이 강하다
- 값 타입만 사용하는 의미있는 메소드도 만들수 있다.
- 기본생성자가 필수이다
- @Embedded 를 이용해서 임베디드 타입을 포함
- 임베디드 타입이 null이면 칼럼 값은 모두 null이 된다
- 여러 엔티티에서 공유하면 위험하다 ex)회원2에서 newCity로 변경되길 원하지만 회원1도 newCity로 변경된다... 이런 부작용을 막으려면 값 타입 복사를 사용
- 자바ORM JPA책 330p 참조하기! 결론 ->
값타입을 setter를 막고 불변객체로 설계하자!! 동등성 equals() 를
회원 테이블 분석
- Item(싱글 테이블 전략 DTYPE로 구분한다)
- CATEGORY_ITEM을 이용하여 다대다 관계를 일대다 다대일로 풀어낸다
- 연관관계 매핑분석
- 회원과 주문 : 일대다,다대일 양방향 관계는 연관관계의 주인을 정해야한다
(외래키 있는쪽이 주인 (다))
- 주문상품과 주문,상품 : 주문과 상품의 연관관계의 주인 이다 (상품은 단방향관계) (주문은 양방향관계)
- 주문과 배송 : 일대일 단방향 관계 주문을 연관관계의 주인으로 두었다
- 회원과 주문 : 일대다,다대일 양방향 관계는 연관관계의 주인을 정해야한다
외래키가 있는곳으로 연관관계의 주인을 정해라!
출처
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-JPA-%ED%99%9C%EC%9A%A9-1/dashboard (JPA 웹 애플리케이션 1)
728x90
'Back-End > Spring Data' 카테고리의 다른 글
5.상품도메인 개발 (0) | 2020.12.30 |
---|---|
4.회원도메인 개발 (0) | 2020.12.30 |
3.엔티티클래스 개발2 (0) | 2020.12.30 |
2.엔티티 클래스 개발1 (0) | 2020.12.30 |
0.JPA공부 (0) | 2020.12.26 |