책 정리/도메인 주도 개발 시작하기
part 1. 도메인 모델 시작하기
닉네임이 왜 필요해
2023. 7. 8. 00:44
도메인 모델 시작하기
도메인이란
- 비즈니스 도메인 [온라인 서점]
- 하위도메인 [주문]
- 하위도메인 [회원]
- 하위도메인 [혜택]
- 하위도메인 [배송]
- 하위도메인 [결제]
- 하위도메인 [정산]
- 하위도메인 [카탈로그]
- 하위도메인 [리뷰]
- 회사에 적용한다면?
도메인 전문가와 개발자 간 지식 공유
- 개발에 앞서서 각 하위도메인들이 어떤 역할을 하게 되는지 파악할 수 있음
도메인 모델
- 어떻게 하면 개념 모델을 잘 작성할 수 있는가?
- 예시에서는 상태 다이어그램을 이용한 주문 산태 모델링을 통해 의미를 전달한다.
- uml을 이용해 개념모델 표현하여 도메인 자체를 이해할수있도록 작업한다.
- [추가] uml은 어떨때 사용해야하는가? (UML 실전에서는 이것만 쓴다.)
- 언제 다이어그램을 그려야 하며, 어떻게 그려야 하는가
- 언제 다이어그램을 그려야 하며 언제 멈춰야 하는가
- 프로젝트가 완료된 후
- 프로젝트를 시작하기 전 의사사통할때
- CASE 도구
- 하지만 문서화는 어떻게 합니까
- 그러면 Javadoc은?
- 결론
- 언제 다이어그램을 그려야 하며 언제 멈춰야 하는가
- 언제 다이어그램을 그려야 하며, 어떻게 그려야 하는가
- [추가] mermaid를 이용한 상태도 표현하기
stateDiagram-v2
[*] --> Still
Still --> [*]
Still --> Moving
Moving --> Still
Moving --> Crash
Crash --> [*]
Online FlowChart & Diagrams Editor - Mermaid Live Editor
도메인 모델 패턴
- 표현계층 : 사용자의 요청을 처리하고 사용자에게 정보를 보여준다. 여기서 사용자는 소프트웨어를 사용하는 사람뿐만아니라 외부 시스템일 수도 있다.
- 응용계층 : 사용자가 요청한 기능을 실행한다. 업무로직은 직접적으로 구현하지않으며 도메인 계층을 조합해서 기능을 실행한다.
- 도메인 : 시스템이 제공할 도메인 규칙을 구현한다.
- 인프라스트럭처 : 데이터베이스나 메시징 시스템과 같은 외부시스템과의 연동을 처리한다.
💡 @transaction “usecase layer” vs “presentation layer”
- 개념모델과 구현모델
- 완벽한 개념모델을 만들기보다는 전반적인 개요를 알 수 있는 수준으로 개념 모델을 작성해야한다.
도메인 모델 도출
- 비즈니스 요구사항은 domain 에서 구현한다
💡 글을 통해서 작성하는 문서화를 경계하고 코드를 통해 문서화하라
엔티티와 벨류
- 엔티티
- 식별자를 가진다.
- 밸류 타입
- Money, ObjectId와 같은 데이터도 클래스를 만들어서 밸류 타입을 이용하도록 한다.
- 도메인은 aggregate를 통해 움직이기고 이때 해당 데이터를 일관된 데이터로 최신화한다
- 만약 setter가 존재하게 된다면 도메인의 aggregate없이 데이터를 수정하는 상황이 발생할 수 있는 코드라 setter의 존재를 경계한다.
create table shop.purchase_order (
order_number varchar(50) not null primary key,
version bigint,
orderer_id varchar(50),
orderer_name varchar(50),
total_amounts int,
shipping_zip_code varchar(6),
shipping_addr1 varchar(100),
shipping_addr2 varchar(100),
shipping_message varchar(200),
receiver_name varchar(50),
receiver_phone varchar(50),
state varchar(20),
order_date datetime
) character set utf8mb4;
create table shop.order_line (
order_number varchar(50) not null,
line_idx int not null,
product_id varchar(50) not null,
price int,
quantity int,
amounts int
) character set utf8mb4;
도메인 용어와 유비쿼터스 언어
- 전문가, 관계자, 개발자가 도메인과 관련된 공통의 언어를 만들고 이를 대화, 문서, 도메인모델, 코드, 테스트 등 모든곳에서 같은 용어를 사용해야한다.