본문 바로가기
Back-End/Spring Data

1.도메인 분석설계

by 두두리안 2020. 12. 30.
728x90

1.도메인분석 설계

목차

  • 1.요구사항 분석
  • 2.도메인 모델과 테이블 설계
  • 3.엔티티 클래스 개발1
  • 4.엔티티 클래스 개발2
  • 5.엔티티 설계시 주의점

1.요구사항 분석

  • 회원기능
    • 회원등록
    • 회원조회
  • 상품기능
    • 상품등록
    • 상품수정
    • 상품조회
  • 주문기능
    • 상품주문
    • 주문내역조회
    • 주문취소
  • 기타요구사항
    • 상품은 제고관리가 필요하다.
    • 상품의 종류는 도서,음반,영화가 있다.
    • 상품을 카테고리로 구분할수 있다.
    • 상품주문시 배송정보를 확인할수 있다.2.도메인 모델과 테이블 설계image
  • 회원,주문,상품의 관계
    • 회원은 여러상품을 주문할수있다.
    • 주문할때 여러상품을 선택할수 있으므로 주문과 상품은 다대다 관계이다
    • 다대다 관계는 사용하지 않는다 그래서 주문상품을 넣는다
    • 주문상품을 넣어서 다대다 관계를 다대일,일대다 관계로 풀어낸다
  • 상품분류
    • 상품은 도서,음반,영화로 구분되는데 상품이라는 공통속성을 사용하므로 상속구조로 표현한다회원 엔티티 분석image
  • 회원(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() 를

회원 테이블 분석

image

  • 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