- 도메인 모델
- 엔티티와 밸류
- 도메인 용어
도메인
- 소프트웨어로 해결하고자 하는 문제 영역, 즉 도메인(domain)
- 한 도메인은 하위 도메인으로 나눌 수 있다.
도메인 모델
- 특정 도메인을 개념적으로 표현한 것
- 도메인 모델을 사용하면 여러 관계자들이 동일한 모습으로 도메인을 이해하고 도메인 지식을 공유하는 데 도움이 된다.
- 도메인을 이해하려면 도메인이 제공하는 기능과 도메인의 주요 데이터 구성을 파악해야 한다. 이런 면에서 기능과 데이터를 함께 보여주는 객체 모델은 도메인을 모델링 하기에 적합하다.
- 도메인 모델은 기본적으로 도메인 자체를 이해하기 위한 개념 모델.
도메인 모델 패턴
일반적인 애플리케이션의 아키텍쳐 구성
계층(Layer) | 설명 |
사용자인터페이스 (UI) 또는 표현 (Presentation) | 사용자의 요청을 처리하고 사용자에게 정보를 보여준다. 여기서 사용자는 소프트웨어를 사용하는 사람 뿐만 아니라 외부 시스템도 사용자가 될 수 있다. |
응용(Application) | 사용자가 요청한 기능을 실행한다. 업무 로직을 직접 구현하지 않으며 도메인 계층을 조합해서 기능을 실행한다. |
도메인 | 시스템이 제공할 도메인의 규칙을 구현한다. |
인프라스트럭처(Infrastructure) | 데이터베이스나 메시징 시스템과 같은 외부 시스템과의 연동을 처리한다. |
- 도메인 모델은 아키텍처 상의 도메인 계층을 객체 지향 기법으로 구현하는 패턴을 말한다.
- 도메인 계층은 도메인의 핵심 규칙을 구현한다.
- 이런 도메인 규칙을 객체 지향 기법으로 구현하는 패턴이 도메인 모델 패턴이다.
'도메인 모델'이란 용어는 도메인 자체를 표현하는 개념적인 모델을 의미하지만, 도메인 계층을 구현할 때 사용하는 객체 모델을 언급할 때에도 '도메인 모델'이란 용어를 사용한다. 이 책에서도 도메인 계층의 객체 모델을 표현할 때 도메인 모델이라고 표현하고 있다.
도메인 모델 도출
- 도메인을 모델링할 때 기본이 되는 작업은 모델을 구성하는 핵심 구성요소, 규칙, 기능을 찾는 것이다.
- 도메인을 구현하다 보면 특정 조건이나 상태에 따라 제약이나 규칙이 달리 적용되는 경우가 많다.
엔티티와 밸류
- 도출한 모델은 크게 엔티티(Entity)와 밸류(Value)로 구분할 수 있다.
- 식별자는 단순한 문자열이 아니라 도메인에서 특별한 의미를 지니는 경우가 많기 때문에 식별자를 위한 밸류 타입을 사용해서 의미가 잘 드러나도록 할 수 있다.
- 도메인 객체가 불완전한상태로 사용되는 것을 막으려면 생성 시점에서 필요한 것을 전달해 주어야 한다. 즉 생성자를 통해 필요한 데이터를 모두 받아야 한다.
엔티티(Entity)
- 엔티티 객체마다 고유한 식별자를 갖는다.
- 엔티티의 식별자는 바뀌지 않는다. 엔티티를 생성하고, 엔티티의 속성을 바꾸고, 엔티티를 삭제할 때까지 식별자는 유지된다.
- 엔티티의 식별자는 바뀌지 않고 고유하기 때문에 두 엔티티 객체의 식별자가 같으면 두 엔티티는 같다고 판단할 수 있음.
- 엔티티의 식별자 생성
1) 특정한 규칙에 따라 생성
2) UUID 사용
3) 값을 직접 입력
4) 일련번호 사용(시퀀스나 DB의 자동 증가 칼럼 사용)
밸류(Value)
- 밸류 타입은 개념적으로 완전한 하나를 표현할 때 사용.
- 밸류 타입이 꼭 두개 이상의 데이터를 가져야 하는것은 아니다. 의미를 명확하게 하기 위해서 사용하는 경우도 있음. (ex) Money
- 밸류 타입을 위한 기능 추가 가능.
- 밸류 객체의 데이터를 변경할 때는 기존 데이터를 변경하기 보다는 변경한 데이터를 갖는 새로운 밸류 객체를 생성하는 방식을 선호한다.
- 데이터 변경기능을 제공하지 않음, 불변(immutable), 보다 안전한 코드를 작성할 수 있음.
- 엔티티 타입의 두 객체가 같은지 비교할 때 주로 식별자를 사용한다면 두 밸류 객체가 같은지 비교할 때는 모든 속성이 같은지 비교해야 한다.
도메인 용어
- 도메인에서 사용하는 용어는 매우 중요함.
- 도메인에서 사용하는 용어를 최대한 코드에 반영해야 함.
- 도메인 용어로 해석하거나 도메인 용어를 코드로 해석하는 과정이 줄어듬, 이는 코드의 가독성을 높여서 코드를 분석하고 이해하는 시간을 절약한다.
'책' 카테고리의 다른 글
[DDD START!] 3장 애그리거트 (0) | 2020.07.04 |
---|---|
[DDD START!] 2장 아키텍처 개요 (0) | 2020.07.04 |
[DDD START!] 6장 응용 서비스와 표현 영역 (0) | 2020.07.01 |
[모던 자바 인 액션] 1장 (0) | 2020.06.26 |
5장. 리포지터리의 조회 기능(JPA 중심) (0) | 2020.06.24 |