TIL

Chapter1 도메인 모델 시작하기

1.1 도메인이란?

1.2 도메인 전문가와 개발자 간 지식 공유

1.3 도메인 모델

하위 도메인과 모델

도메인은 다수의 하위 도메인으로 구성되고, 각 도메인이 다루는 영역은 서로 다르기에, 같은 용어라도 의미가 달라질 수 있다. 카탈로그 도메인의 ‘상품’은 가격, 내용 등을 담지만 배송 도메인의 ‘상품’은 실제 배송되는 물리적인 상품을 의미한다. 모델의 각 요소는 특정 도메인으로 한정할 때 의미가 완전해지기 때문에 각 하위 도메인마다 별도로 모델을 만들어야 한다.

1.4 도메인 모델 패턴

일반적인 애플리케이션 아키텍처는 다음과 같이 네 개의 영역으로 구성된다.

영역 설멍
사용자 인터페이스 또는 표현(Presentation) 사용자의 요청을 처리하고 사용자에게 정보를 보여준다. 사용자는 사람 뿐 아니라 외부 시스템일 수도 있다.
응용(Application) 사용자가 요청한 기능을 실행한다. 업무 로직을 직접 구현하지 않으며 도메인 계층을 조합해서 기능을 실행한다.
도메인 시스템이 제공할 도메인 규칙을 구현
인프라스트럭처(infrastrcture) 데이터베이스나 메시징 시스템 같은 외부 시스템과의 연동을 처리한다.

도메인 계층

도메인 모델이란 용어는 도메인 자체를 표현하는 개념적인 모델을 의미하지만, 도메인 계층을 구현할 때 사용하는 객체 모델에도 도메인 모델이란 용어를 사용한다.

개념 모델과 구현 모델

개념 모델은 순수하게 문제를 분석한 결과물로 DB, 성능, 기술을 고려하지 않는다. 그래서 개념 모델을 구현 가능한 모델로 전환하는 과정을 거치게 된다. 처음부터 완벽한 개념 모델을 만드는 것은 거의 불가능하다. 이는 프로젝트를 진행하면서 해당 도메인을 더 잘 이해하게 되고 다른 의미로 해석하는 경우도 발생하기 때문이다. 그래서 전반적인 개요를 알 수 있는 수준으로 개념 모델을 작성해야 한다. 구현하는 과정에서 개념 모델을 구현 모델로 점진적으로 발전시켜 나가야 한다.

1.6 엔티티와 밸류

도메인 모델은 크게 엔티티밸류로 구분할 수 있다.

1.6.1 엔티티

1.6.2 엔티티의 식별자 생성

1.6.3 밸류 타입

1.6.4 엔티티 식별자와 밸류 타입

public Order {
	private OrderNo id;
}

1.6.5 도메인 모델에 set 메서드 넣지 않기

1.7 도메인 용어와 유비쿼터스 언어

유비쿼터스 언어