도메인이란?
소프트웨어로 해결하고자 하는 문제 영역
일반적인 요구사항
ex, 온라인 서점
특정 도메인을 위한 소프트웨어라고 해서 모든 기능을 직접 구현하는 것은 아님(배송시스템, 결제시스템 등)
도메인 모델
도메인 자체를 이해하기 위한 개념 모델
여러 관계자들이 동일한 모습으로 도메인을 이해하고 도메인 지식을 공유하는 데 도움이 됨
도메인 계층
도메인의 핵심 규칙을 구현
ex) 주문 도메인 > 출고 전에 배송지 변경할 수 있다, 주문 취소는 배송 전에만 가능하다
라는 규칙이 도메인 계층에 위치
개념모델 : 순수하게 문제를 분석한 결과물로 데이터베이스, 트랜잭션처리, 성능, 구현 기술과 같은 것을 고려X
처음부터 완벽한 개념모델을 만들기보다는 구현하는 과정에서 구현 모델로 점진적으로 발전 시켜야 함
엔티티
고유한 식별자를 가지는 테이블 모델.
주문에서 배송지가 바껴도 주문번호가 바뀌지 않는 것처럼 식별자는 바뀌지 않음.
엔티티 식별자 생성
- 특정 규칙에 따라 생성
- UUID나 Nano ID 생성기 사용
- 값을 직접 입력
- 일련 번호 사용(Sequence, DB자동 증가 컬럼)
밸류
데이터 표현 모델 식별자를 가지고 있지 않고 불변타입
개념적으로 완전한 하나를 표현할 때 사용한다.
Receiver는 '받는 사람'이라는 도메인 개념을 표현한다.
name과 phoneNumber로 받는 사람 그 자체를 의미.
밸류 타입이 꼭 두 가지 이상의 데이터를 가져야 하는 것은 아니지만 명확하게 하기 위해 밸류타입을 사용하는 경우도 있다.
int price 대신 위처럼 도메인을 만들어 사용할 수 있다.
또 다른 장점은 기능을 추가할 수 있다는 것이다.
데이터 변경 기능을 제공하지 않는 타입을 불변이라고 한다.
안전한 코드를 작성할 수 있다.
도메인 모델 만들 때 주의할 점
- 의도적으로 set을 넣지 않는다.
get/set 메서드를 습관적으로 만들지 말자. set은 도메인의 핵심 개념이나 의도를 코드에서 사라지게 한다.
private으로 구현할 수도 있다.(특별한 이유가 없다면 구현X)
유비쿼터스 언어
전문가, 관계자, 개발자가 도메인과 관련된 공통의 언어를 만들고 이를 대화, 문서, 도메인모델, 코드, 테스트 등 모든 곳에서 같은 용어를 사용한다.
출처
https://incheol-jung.gitbook.io/docs/q-and-a/architecture/ddd
'책리뷰 > 도메인 주도 개발 시작하기(DDD핵심 개념 정리부터 구현까지)' 카테고리의 다른 글
도메인 주도 개발 (DDD) 시작하기 응용서비스와 표현영역 (0) | 2022.05.19 |
---|---|
도메인 주도 설계(DDD) 스프링데이터 JPA를 이용한 조회 (0) | 2022.05.17 |
도메인 주도 개발(DDD) 리포지터리와 모델 구현 (0) | 2022.05.13 |
도메인 주도 설계(DDD) 애그리거트 (0) | 2022.05.11 |
도메인 주도 설계 아키텍처 (0) | 2022.05.10 |