[Dev.] 개발, Domain 모델링

핑쿠핑쿠한 지니·2021년 2월 24일
0

dev

목록 보기
1/2

DDD 최범균 저자님 책 읽으면서, JPA 김영한 저자님 책 읽으면서, , 정리한 내용

처음에는 어렵게만 느껴지던 내용들이, 다시 읽고 제대로 읽고 해보니까 조금씩 이해가 되었다.
내용도 알차고 이해를 주기위한 노력을 풀어냄이 느껴진다고 해야할까나.
무튼 입문서로는 기본적으로 읽어봤으면 한다.

  1. DDD 원칙
  2. JPA 개발원칙

2/24 적용예정
@MappedSuperClass 적용하기 - BaseEntity

  • createDate
  • UpdateDate

객체지향형 도메인 주도 개발에 대한 이해

  1. 도메인 모델
  • 특정 도메인을 개념적으로 표현한 것
  • 시스템이 제공할 도메인의 규칙을 구현한다.
  • 예제 처럼 주문과 관련된 중요 업무 규칙을 주문 도메인 모델인 Order나 OrderState에서 구현한다.
  • 이는 핵심규칙을 구현한 코드는 도메인 모델에만 위치하기 때문에 규칙이 바뀌거나 규칙을 확장해야 하는 경우, 다른 코드에 영향을 덜 주고 변경내역을 모델에 반영할 수 있게 된다.
  1. 도메인 모델링의 기본
  • 핵심 구성요소
  • 규칙
  • 기능
    (즉 , 각 도메인에서 규칙에 해당하는 제약사항을 기술한다. )

엔터티와 밸류타입

  1. 엔터티는 식별자를 가진다.
  2. 벨류타입은 개념적으로 완전한 하나를 표현할 때 사용된다. (주소, 받는사람 등 클래스화 가능한 데이터)
    • 벨류타입을 사용할 때 장점은 amount, price 에 Money 벨류 타입을 만들어서 사용하는 것과 같이 금액을 의미한다는 것을 명확하게 알수 있게 한다.
    • 돈 계산과 같은 기능을 해당 벨류 타입 클래스에서 구현할 수 있다.
    • 즉 Money를 사용하는 코드는 돈 계산 이라는 의미로 코드를 작성할 수 있다. 즉 코드의 가독성이 향상!된다.
    • Add 메서드와 같이 데이터를 변경할 때에는 / 기존 데이터를 변경하기 보다는 변경한 데이터를 갖는 새로운 벨류 객체를 생성하는 방식을 선호한다.
    • 변경할 수 없는 ! 즉 변경기능을 제공하지 않는 타입을 ‘불변(immutable)’ 이라고 표현한다.
    • ‘불변 객체’는 참조 투명성과 스레드에 안전한 특징을 갖고 있다.
    • https://goo.gl/2Lo4pU 참고
    • 벨류타입은 equals 메서드 오버라이딩 ! 해준다.
    • Order 식별자 타입으로 String 대신에 orderNo 벨류 타입을 사용하면 타입을 통해서 해당 필드가 주문번호라는 것을 알 수 있다.
    • ( 예제 코드에서 벨류타입 클래스를 활용하는 게 많은 이유인 것 같다. )
  • 도메인 모델에 set 메서드 넣지 않기
    • 특히 set 메서드는 도메인의 핵심 개념이나 의도를 코드에서 사라지게 한다.
    • ex) changeShippingInfo() - setShippingInfo
    • Ex) completePayment() - setOrderState
    • 앞에 꺼대로 결제완료와 관련된 도메인 지식을 코드로 구현하는 것이 자연스럽다.
    • ‘상태 변경과 관련된 도메인 지식이 코드에서 사라지게 된다’
  • 도메인 객체가 불완전한 상태로 사용되는 것을 막으려면 생성 시점에 필요한 것을 전달해주어야 한다. 즉, 생성자를 통한 필요한 데이터를 모두 받아야 한다.
    • 생성 시점에 필요한 데이터가 올바른지 검사할 수 있다.
    • private 으로 내부에서만 접근하여 변경할 목적을 갖는다.
    • “ 불변 밸류 타입을 사용하면 자연스럽게 밸류 타입에는 set메서드를 구현하지 않는다.”
    • “ 특별한 이유가 없다면? 불변 타입의 장점을 살릴 수 있도록 벨류타입은 불변으로 구현한다. “
    • 불변의 장점을 DTO 까지 확장하자. (Data Transfer Object)
  • 도메인 용어 사용
    • OrderState 와 같이 enum 활용 해서 상태를 구분하는 구분값을 명확하게 인지 가독성 향상
    • 시간을 들여 알맞은 영어 단어를 찾는 노력을 해야한다.
    • 미래의 이익을 위해 찾는 시간을 아까워 하지말자.
profile
Web Developer, Backend, Server

0개의 댓글