Books/도메인 주도 개발 시작하기
Chapter1. 도메인 모델 시작하기
YoonJong
2024. 4. 5. 00:01
728x90
- 도메인 : 소프트웨어로 해결하고자 하는 문제 영역
- 도메인은 여러 하위 도메인으로 구성된다.
- 소프트웨어가 도메인의 모든 기능을 제공하지는 않는다.
- 도메인 모델 : 특정 도메인을 개념적으로 표현한 것
- 기본적으로 도메인 자체를 이해하기 위한 개념 모델
- 도메인 모델 패턴
- 사용자 인터페이스 또는 표현
- 사용자의 요청을 처리하고 사용자에게 정보를 보여준다. 외부 시스템일 수도 있다.
- 응용
- 사용자가 요청한 기능을 실행
- 도메인
- 시스템이 제공할 도메인 규칙을 구현
- 인프라스트럭처
- DB 나 메시징 시스템과 같은 외부 시스템과의 연동 처리
- 사용자 인터페이스 또는 표현
- 도메인 모델 도출
- 모델을 구성하는 핵심 구성요소, 규칙, 기능을 찾는 것
- 요구사항 확인하기
- 엔티티와 밸류
- 엔티티
- 엔티티 객체마다 고유해서 각 엔티티는 서로 다른 식별자를 갖는다.
- 특정 규칙에 따라 생성
- UUID 와 같은 고유 식별자 생성기 사용
- 값을 직접 입력
- 일련번호 사용 ( 자동 증가 컬럼 등 )
- 자동증가 컬럼은 DB 테이블에 데이터를 삽입해야 해당 값을 알 수 있다.
- 엔티티 객체마다 고유해서 각 엔티티는 서로 다른 식별자를 갖는다.
- 밸류 타입
- 개념적으로 완전한 하나를 표현할 때 사용
- 의미를 명확하게 표현하기 위함
- 밸류 타입을 위한 기능 추가 가능
- 안전한 코드 생성 가능
@Embeddable public class Address { private String street; private String city; private String zipCode; } -- @Entity @Table(name = "person") public class Person { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @Embedded private Address address; } -- Person person = new Person(); person.setName("JYJ"); Address address = new Address(); address.setStreet("서울"); address.setCity("씨티"); address.setZipCode("12345"); person.setAddress(address);
- 엔티티
- 도메인 모델는 set 메서드를 넣지 않는다.
- 도메인의 핵심 개념이나 의도를 코드에서 사라지게 한다.
- 생성자를 통해 필요한 데이터를 모두 받아야 한다.
- 도메인 용어와 유비쿼터스 언어
- 도메인용어는 가독성을 높여서 코드를 분석하고 이해하는 시간을 줄여준다
- 유비쿼터스 언어는 모두가 공유하는 언어를 의미한다.
public enum OrderStatus {
NEW,
PAYMENT_PENDING,
SHIPPING,
DELIVERED,
CANCELLED
}
구분 | 도메인 용어 | 유비쿼터스 언어 |
정의 | 특정 문제 영역에서 사용되는 전문 용어 | 도메인 전문가, 개발자, 테스터 등 프로젝트 참여자 모두가 공유하는 언어 |
범위 | 특정 문제 영역 | 프로젝트 |
용도 | 문제 영역을 이해하고 설명하기 위한 용도 | 의사 소통, 코드 작성, 문서 작성 등 프로젝트 내에서 일관되게 사용 |
728x90