VO란?
1)사전적의미는 '영역', '집합'
2)DDD에서 말하는 Domain은 비즈니스 Domain
3)비즈니스 도메인은 유사한 업무의 집합.
4)어플리케이션은 비즈니스 Domain별로 나누어 설계 및 개발 될 수 있습니다.
1)비즈니스 도메인 별로 나누어 설계하는 방식
2)핵심 목표는 "Loosly coupling", "High cohension"
(어플리케이션 또는 그 안의 모듈간의 의존성은 최소화하고, 응집성은 최대화)
3)Strategic Design과 Tactical Design으로 나눌 수 있다. Strategic Design은 개념 설계이고, Tactical Design은 프로그래밍하기 위한 구체적 설계라고 할 수 있습니다.
1)비즈니스 도메인의 상황(context: 대상사용자, 상황)에 맞게 설계
2)비즈니스 도메인의 상황을 event storming으로 공유하고, 비즈니스 목적별로 서비스들을 그룹핑
3)Bounded Context: 비즈니스 도메인의 사용자, 프로세스, 정책/규정 등을 고유한 비즈니스 목적별로 그룹핑한 것
Domain model:비즈니스 도메인의 서비스를 추상화한 설계도
도메인을 Sub domain으로 분해한 것과 Bounded Context가 Domain model입니다.
4)Bounded Context는 최소한 1개 이상의 Micro service로 구성
5)Context map: Bounded Context간의 관계를 나타낸 도식화한 다이어그램
6)Ubiquitous Language: 참여자들이 동일한 의미로 이해하는 언어
7)Strategic Design의 결과물:Domain Model
-Problem Space:Biz Domain 분할
Core/sub/Generic(공통 기능):보통 서드파티제품을 구매
Domain 분해 예제: 온라인 음식 주문 업무
주문, 주문중계, 음식점업무, 배달대행의 최상위 도메인을 정의하고 각 도메인을 서브도메인으로 분해함.
-Solution Space: Context Map 정의
https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FebVA9R%2FbtqIqmN8ytR%2FHk4xV2VvTv1VP1P4c7TbGK%2Fimg.png
-관계의 종류
Sharked Kernel:복수의 바운디드 컨텍스트가 공통으로 사용하는 바운디드 컨텍스트간의 관계
Upstream-Downstream
-Bounded Context의 특성 종류
OHS(open host service)
ACL(anti corruption layer)
8)Event storming:비즈니스 도메인 내에서 일어나는 것들을 찾아 Bounded Context를 식별하는 방법론
예)
Step1. Domain event 정의: 비즈니스 도메인 내에 발생하는 모든 이벤트를 과거형으로 기술-"오렌지색"
Step2. Tell the story:도출된 이벤트로 도메인의 업무 흐름을 이해하고 토론하여 보완
Step3. 프로세스로 그룹핑: 이벤트들을 프로세스로 그룹핑
Step4. Command 정의: 각 Domain event를 발생시키는 명령을 현재형으로 정의하며 명령형으로 기술-"파란색"
Step5. Trigger정의: Command를 일으키는 Actor와 Event를 일으키는 External System와 Policy/Rule을 정의

Step6. Aggregate 정의:Command 수행을 위해 CRUD해야 하는 데이터 객체 정의-"노란색"
Aggregate는 고유의 비즈니스 목적 수행을 위한 데이터 객체들의 집합.
ex)피자주문도메인의 aggregate에는 order, consumer, restaurant가 있다. order aggregate에는 order, deliveryinfo, paymentinfo라는 entity가 있고, order entity는 orderlineitem(메뉴별 주문량)이라는 VO(value object)와 연결됩니다. order와 orderlineitem은 1:n의 관계가 됩니다.
-command를 수행해서 event를 발생시킬려면 어떤 데이터가 필요한지 커맨드와 이벤트 사이의 위에 적습니다.

Step7. Bounded Context정의 -"빨간색"

Step8. Context map 작성
