도메인
개발자 입장에서 온라인 서점을 구현해야 할 소프트웨어로 바라보자. 온라인 서점 소프트웨어는 온라인으로 책을 판매하는 데 필요한 상품조회, 구매, 결제, 배송 추적 등의 기능을 제공해야 한다. 이때, '온라인 서점'은 소프트웨어로 해결하고자 하는 문제 영역, 즉 도메인에 해당된다.
특징
- 한 도메인은 다시 하위 도메인으로 나눌 수 있다.
- 도메인마다 고정된 하위 도메인이 존재하는 것은 아니다.
- 하위 도메인을 어떻게 구성할지 여부는 상황에 따라 달라진다.
도메인 모델
도메인 모델 패턴 이란?
마틴 파울러가 재창한 두 개의 개념으로, 비즈니스 로직을 처리하는 2가지 패턴을 말한다. 책임 소재가 Domain Level이냐 Script Level이냐의 차이에 따라 구분된다.
Domain 부분에서 비즈니스 로직을 가지고 객체 지향의 특성을 적극 활용 하는 것을 도메인 모델 패턴이라 한다. 대부분의 비즈니스 로직이 엔티티 안에 구성되어 있다. 서비스 계층은 엔티티에 필요한 역할을 위임하는 역할을 한다. 엔티티 안에 비즈니스 로직을 가지고 객체지향을 활용하는 기법이다.
4개의 영역으로 구성되어 있다.
- 표현 : 사용자의 요청을 처리, 정보를 보여줌
- 응용 : 요청한 기능을 실행
- 도메인 : 시스템이 제공할 도메인 규칙 구현
- 인프라스트럭쳐 - DB : 외부 시스템과의 연동을 처리
도메인 계층은 도메인의 핵심 규칙을 말한다.
ex) 주문 도메인 : 출고 전에 배송지를 변경할 수 있다. 주문 취소는 배송 전에만 할 수 있다 등
도메인 모델이란?
도메인 모델은 기본적으로 특정 도메인을 개념적으로 표현한 것이다. 도메인 모델은 개념 모델을 이용해서 바로 코드를 작성하지 않는다. 구현 기술에 맞는 구현 모델이 필요하다. 개념모델이 구현모델과 같지 않지만 구현모델이 개념 모델을 최대한 따르도록 할 수 있다.
ex) 주문 도메인 -> 상품 리스트, 총 지불 금액 계산, 결제 수단 선택 등
도메인 모델은 객체로만 모델링할 수 있는 것은 아니다. 관계가 중요한 도메인은 그래프를 이용하고, 계산 규칙이 중요하다면 수학 공식을 활용해서 만들 수 있다.
장, 단점
장점: 객체 지향에 기반한 재사용성,확장성, 그리고 유지 보수의 편리함 필요에 따라 약간의 수정이 필요하겠지만 언제든지 재사용할 수 있다.
단점: 하나의 도메인 모델을 구축하는데 많은 노력이 필요하다, 객체를 판별하고 객체들 간의 관계를 정립해야 하고, 데이터베이스 사이의 매핑에 대해서 고민해야 한다. 도메인 모델에 능숙한 개발자가 없을 경우 구축 자체가 힘들어질 수도 있다.
📌NOTE 하위 도메인과 모델
도메인은 다수의 하위 도메인으로 구성된다. 도메인에 따라 용어 의미가 결정되므로 여러 하위 도메인을 하나의 다이어그램에 모델링하면 안 된다.
모델의 각 구성요소는 특정 도메인으로 한정할 때 비로소 의미가 완전해지기 때문에 각 하위 도메인마다 별도로 모델을 만들어야 한다.
엔티티와 밸류
도출한 모델은 크게 엔티티와 밸류로 구분할 수 있다.
엔티티
- 엔티티의 가장 큰 특징 : 식별자를 가진다는 것
- 식별자는 엔티티 객체마다 고유하다.
엔티티의 식별자 생성
다음 중 하나를 선택해서 생성한다.
- 특정 규칙에 다라 생성
- UUID나 Nano ID와 같은 고유 식별자 생성기 사용
- 값을 직접 입력
- 일련번호 사용
📌NOTE DTO의 get/set 메서드
요즘 개발 프레임워크나 개발 도구는 set 메서드가 아닌 private 필드에 직접 값을 할당할 수 있는 기능을 제공하고 있어 set 메서드가 없어도 프레임워크를 이용해서 데이터를 전달받을 수 있다. 프레임워크가 필드에 직접 값을 할당하는 기능을 제공하고 있다면 set 메서드를 만드는 대신 해당 기능을 최대한 활용해 보자.
reference
https://sudo-minz.tistory.com/152
DDD START!