의존성 최소화(Loosly coupling=느슨한 결합), 응집성 최대화(High cohesion=높은 응집력)이 목표
Strategic Design(개념 설계)과 Tactical Design(으로 나눌 수 있음
도메인(Domain) 사전적인 의미는 영역, 집합 DDD의 도메인은비즈니스 도메인을 뜻하며,유사한 업무의 집합을 말함(MPRS-마케팅,구매,연구,영업)
개념 설계(Strategic Design)
컨텍스트(Context) 를 기준으로 설계하는 것
용어
설명
Domain
전체 설계
Subdomain
구성하는 부분 집합 (안방, 창고, 화장실 등)
Domain Model
실제 Subdomain의 구체적인 형상 (비즈니스 도메인의 서비스를 추상화한 설계도)
Context
특정 객체 혹은 상황이 벌어지는 주변 환경 (사용자, 프로세스, 정책/규정)
Bounded Context
Biz Domain의 사용자, 프로세스, 정책/규정 등을 고유한 비즈니스 목적별로 그룹핑한것 (Domain안의 서비스를 경계 지은 Context의 집합)
특정 모텔은 어떤 bounded context에 놓이는가에 따라 다르게 이해될 수 있습니다. 예를 들어, 주택 정문에서 caretaker라는 모델이 있다면 이는 '경비원' 뜻합니다. 하지만 이 단어가 주택 건물 안에서 가지는 의미는 '아이를 돌보는 사람'이 될 수 있습니다.
Ubiquitous Language
현업, 개발자, 디자이너 등 참여자들이 동일한 의미로 이해하는 언어
'마우스'라는 단어는 '컴퓨터부속품생산'도메인내에서는 '컴퓨터 화면 안에서 커서를 옮기는 컴퓨터 부속품'으로 통용됩니다. '해충박멸서비스'도메인내에서는 '꼬리 달리고 털이 나있는 짐승'으로 이해됩니다.
Context Map
Bounded Context간의 관계를 나타낸 도식화한 Diagram
구체적 설계(Tactical Design)
개발을 위해 구체적으로 설계하는 것
Model Driven Design
Strategic Design에서 설계한 각 Sub Domain별 Domain Model(Context Map)을 중심으로 설계하는 것
Layered Architecture
Tatical Design시 목적별 계층으로 나누어 설계하는것을 의미
Layer
Annotaion
설명
Presentiation Layer
@Controller, @RestController
UI Layer
Service & Domain Layer
@Service
- Service Layer: Domain Layer와 Data Layer의 class들간의 제어(Control) 또는 연결(Interface)을 합니다. Biz logic을 이 layer에 구현하지 않습니다.
- Domain Layer: Domain Object별로 Business Logic처리를 담당하는 Layer
Data Layer
@Repository
Database와의 CRUD처리 Layer
Service Layer와 Domain Model Layer를 나누는 이유는 새로운 비즈니스 요구에 대응할 때 기존 소스에 영향도를 최소화하고, Domain layer의 재활용성을 극대화하기 위함입니다.
용어 정리
용어
설명
Entity
각 레코드 간에 구별이 필요한 객체 (가변적)
'지폐'라는 객체는 '일련번호'라는 고유 ID로 구별되어야 하므로 엔티티이다.
Value Object(VO)
구별이 필요 없는 객체 (불변성)
'금액'이라는 객체는 '액수'와 '통화'라는 속성이 중요하지 구별할 필요가 없으므로 VO이다.
Aggregate
Entity의 집합
customer, customerInfo,address 는 Customer 라는 주제로 뭉칠 수 있음