도메인 주도 설계의 본질

Post on 10-May-2015

15.940 Views

Category:

Documents

7 Downloads

Preview:

Click to see full reader

DESCRIPTION

도메인-주도 설계(Domain-Driven Design, DDD)의 기본 개념을 정리한 자료입니다.

TRANSCRIPT

도메인-주도����������� ������������������  설계의����������� ������������������  본질����������� ������������������  

Domain-Driven Design Essence

조영호����������� ������������������  

Eternity’s����������� ������������������  Chit-Chat����������� ������������������  

http://aeternum.egloos.com����������� ������������������  

Part - 1

도메인-주도����������� ������������������  설계����������� ������������������  

2011년����������� ������������������  여름����������� ������������������  영화계에서는����������� ������������������  

설득력����������� ������������������  없는����������� ������������������  스토리와����������� ������������������  내러티브����������� ������������������  빈약����������� ������������������  

볼거리에����������� ������������������  치중해����������� ������������������  스토리가����������� ������������������  빈약����������� ������������������  

소문난����������� ������������������  잔치에����������� ������������������  먹을����������� ������������������  것����������� ������������������  없었다����������� ������������������  대작의����������� ������������������  몰락����������� ������������������  

연이은����������� ������������������  언론의����������� ������������������  혹평����������� ������������������  

스토리를����������� ������������������  무시한채����������� ������������������  영화의����������� ������������������  스케일과����������� ������������������  

사이즈에만����������� ������������������  집착하다����������� ������������������  좌초����������� ������������������  ����������� ������������������  ����������� ������������������  

한국형����������� ������������������  블록버스터의����������� ������������������  추락����������� ������������������  CG만����������� ������������������  남고����������� ������������������  이야기는����������� ������������������  증발했다����������� ������������������  

그와����������� ������������������  대조적으로����������� ������������������  

CG를����������� ������������������  전혀����������� ������������������  사용하지����������� ������������������  않았음에도����������� ������������������  

아름다운����������� ������������������  화면과����������� ������������������  내러티브로����������� ������������������  관객을����������� ������������������  사로잡다����������� ������������������  

이야기가����������� ������������������  정서와����������� ������������������  감정적으로����������� ������������������  훌륭하고����������� ������������������  납득할만해야����������� ������������������  한다.����������� ������������������  

기술력에����������� ������������������  너무����������� ������������������  촛점을����������� ������������������  둬서����������� ������������������  (영화나����������� ������������������  이야기의)����������� ������������������  본질을����������� ������������������  흐려서는����������� ������������������  안된다.����������� ������������������  

영화의����������� ������������������  본질은����������� ������������������  기술이����������� ������������������  아니다.����������� ������������������  ����������� ������������������  

-����������� ������������������  김용화(영화감독)����������� ������������������  ����������� ������������������  

이����������� ������������������  교훈은����������� ������������������  소프트웨어����������� ������������������  개발����������� ������������������  분야에서도����������� ������������������  ����������� ������������������  동일하게����������� ������������������  적용����������� ������������������  가능����������� ������������������  

소프트웨어의����������� ������������������  본질����������� ������������������  해당����������� ������������������  소프트웨어의����������� ������������������  사용자를����������� ������������������  위해����������� ������������������  ����������� ������������������  도메인에����������� ������������������  관련된����������� ������������������  문제를����������� ������������������  해결하는����������� ������������������  능력����������� ������������������  ����������� ������������������  

도메인의����������� ������������������  복잡성����������� ������������������  =����������� ������������������  소프트웨어����������� ������������������  개발의����������� ������������������  복잡성����������� ������������������  

대부분의����������� ������������������  프로그래머들은����������� ������������������  기술에����������� ������������������  매혹����������� ������������������  

-����������� ������������������  김용화(영화감독)����������� ������������������  ����������� ������������������  

소프트웨어의����������� ������������������  본질은����������� ������������������  기술이����������� ������������������  아니다.����������� ������������������  ����������� ������������������  

프로그램이����������� ������������������  정서와����������� ������������������  감정적으로����������� ������������������  훌륭하고����������� ������������������  납득할만����������� ������������������  해야����������� ������������������  한다����������� ������������������  

기술력에����������� ������������������  너무����������� ������������������  촛점을����������� ������������������  둬서����������� ������������������  (프로그램이나����������� ������������������  이야기의)본질을����������� ������������������  흐려서는����������� ������������������  안된����������� ������������������  

도메인의����������� ������������������  복잡성 핵심은����������� ������������������  

Domain-Driven Design Tackling Complexity in the Heart of Software

Part - 2

두����������� ������������������  가지����������� ������������������  핵심����������� ������������������  원칙����������� ������������������  

훌륭한����������� ������������������  소프트웨어����������� ������������������  개발의����������� ������������������  전제����������� ������������������  조건����������� ������������������  

도메인의����������� ������������������  본질을����������� ������������������  이해하고����������� ������������������  있는����������� ������������������  

도메인����������� ������������������  전문가 의����������� ������������������  참여����������� ������������������  

도메인����������� ������������������  전문가와의����������� ������������������  ����������� ������������������  원활한����������� ������������������  의사소통����������� ������������������  

언어는����������� ������������������  오해의����������� ������������������  근원이다����������� ������������������  -����������� ������������������  생택쥐페리����������� ������������������  

24

도메인����������� ������������������  전문가와����������� ������������������  ����������� ������������������  개발자����������� ������������������  사이의����������� ������������������  

공유����������� ������������������  언어����������� ������������������  

26

Language

Language

모든����������� ������������������  대화는����������� ������������������  공유����������� ������������������  언어에����������� ������������������  기반����������� ������������������  

모든����������� ������������������  대화는����������� ������������������  공유����������� ������������������  언어에����������� ������������������  기반����������� ������������������  

Language Ubiquitous

도메인����������� ������������������  전문가가����������� ������������������  이해할����������� ������������������  수����������� ������������������  있는����������� ������������������  공용����������� ������������������  언어����������� ������������������  

Based on Domain Concepts

Domain Concepts Domain Abstraction

Domain Abstraction

Domain Abstraction

Domain Model

Ubiquitous Language

Domain Model

모든����������� ������������������  커뮤니케이션����������� ������������������  

based on

based on

모든����������� ������������������  프로그램����������� ������������������  코드����������� ������������������  

Ubiquitous Language

Domain Model

based on

based on

Design Model -Driven

Domain-Driven Design

Ubiquitous Language Model-Driven Design

Part - 3

모델과����������� ������������������  코드����������� ������������������  

37

가상����������� ������������������  계좌(Virtual����������� ������������������  Account)����������� ������������������  환불����������� ������������������  

상품����������� ������������������  주문(Order)����������� ������������������  

가상����������� ������������������  계좌(Virtual����������� ������������������  Account)����������� ������������������  

가상계좌(Virtual����������� ������������������  Account)����������� ������������������  ����������� ������������������  

발급����������� ������������������  

입금(Deposit)����������� ������������������  

구매(Purchase)����������� ������������������  완료����������� ������������������  

상품����������� ������������������  주문(Order)����������� ������������������  

가상����������� ������������������  계좌(Virtual����������� ������������������  Account)����������� ������������������  

입금(Deposit)����������� ������������������  

IN 24H

입금(Deposit)����������� ������������������  

상품����������� ������������������  주문(Order)����������� ������������������  

가상����������� ������������������  계좌(Virtual����������� ������������������  Account)����������� ������������������  

IN 24H

전액����������� ������������������  환불(Refund)����������� ������������������  

그러나...����������� ������������������  

예상과����������� ������������������  달리����������� ������������������  점점����������� ������������������  더����������� ������������������  복잡해지는����������� ������������������  규칙

여러����������� ������������������  종류의����������� ������������������  상품을����������� ������������������  함께����������� ������������������  구매한����������� ������������������  경우

부분����������� ������������������  품절

부분����������� ������������������  환불

입금����������� ������������������  금액����������� ������������������  >����������� ������������������  결제����������� ������������������  금액

차액����������� ������������������  환불

입금����������� ������������������  금액����������� ������������������  <����������� ������������������  결제����������� ������������������  금액

전액����������� ������������������  환불

우리의����������� ������������������  도메인����������� ������������������  규칙은...

전체����������� ������������������  품절����������� ������������������  

부분����������� ������������������  품절����������� ������������������  

입금����������� ������������������  금액����������� ������������������  >����������� ������������������  결제����������� ������������������  금액����������� ������������������  

입금����������� ������������������  금액����������� ������������������  <����������� ������������������  결제����������� ������������������  금액����������� ������������������   결제금액����������� ������������������  전체����������� ������������������  환불����������� ������������������  

결제금액����������� ������������������  부분����������� ������������������  환불����������� ������������������  

입금금액����������� ������������������  차액����������� ������������������  환불����������� ������������������  

입금금액����������� ������������������  전체����������� ������������������  환불����������� ������������������  

아직����������� ������������������  끝나지����������� ������������������  않은...

때때로...

주문����������� ������������������  취소도����������� ������������������  함께...

우리의����������� ������������������  도메인����������� ������������������  규칙은...

전체����������� ������������������  품절����������� ������������������  

부분����������� ������������������  품절����������� ������������������  

입금����������� ������������������  금액����������� ������������������  >����������� ������������������  결제����������� ������������������  금액����������� ������������������  

입금����������� ������������������  금액����������� ������������������  <����������� ������������������  결제����������� ������������������  금액����������� ������������������   결제금액����������� ������������������  전체����������� ������������������  환불����������� ������������������  

결제금액����������� ������������������  부분����������� ������������������  환불����������� ������������������  

입금금액����������� ������������������  차액����������� ������������������  환불����������� ������������������  

입금금액����������� ������������������  전체����������� ������������������  환불����������� ������������������  

취소����������� ������������������  없음����������� ������������������  

전체����������� ������������������  취소����������� ������������������  

부분����������� ������������������  취소����������� ������������������  

49

…⋯

우리의����������� ������������������  코드는

전체����������� ������������������  품절����������� ������������������  

결제금액����������� ������������������  전체����������� ������������������  환불����������� ������������������  

취소����������� ������������������  없음����������� ������������������  

if (isFullySoldOut(order)) { virtualAccountCancelService.refundVirtualAccount(전액);}

전체����������� ������������������  품절

취소����������� ������������������  없음����������� ������������������  

입금����������� ������������������  금액����������� ������������������  >����������� ������������������  결제����������� ������������������  금액����������� ������������������   입금금액����������� ������������������  차액����������� ������������������  환불����������� ������������������  

if (deposit > order.getOrderedPrice()) { virtualAccountCancelService.refundVirtualAccount(차액);}

입금����������� ������������������  금액����������� ������������������  >����������� ������������������  결제����������� ������������������  금액

입금����������� ������������������  금액����������� ������������������  <����������� ������������������  결제����������� ������������������  금액����������� ������������������  

입금금액����������� ������������������  전체����������� ������������������  환불����������� ������������������  

전체����������� ������������������  취소����������� ������������������  

if (deposit < order.getOrderedPrice()) { virtualAccountCancelService.cancelOrder(order); virtualAccountCancelService.refundVirtualAccount(입금액);}

입금����������� ������������������  금액����������� ������������������  <����������� ������������������  결제����������� ������������������  금액

부분����������� ������������������  품절����������� ������������������  

결제금액����������� ������������������  부분����������� ������������������  환불����������� ������������������  

부분����������� ������������������  취소����������� ������������������  

부분����������� ������������������  품절

void PaymentService.paymentTransaction() { ... applyDiscountCouponAndPoint(...); refundVirtualAccount(...); refundCash(...); ...}

단순해����������� ������������������  보이나요?

실제����������� ������������������  코드

…⋯

KcpController

processPayment()

VirtualAccountService

refundVirtualAccount() cancelOrder() RefundDao

Inert()

PaymentService

paymentTransaction() refundCash() applyDIscountCouponAndPoint() refundVirtualAccount()

코드를����������� ������������������  기반으로����������� ������������������  한����������� ������������������  커뮤니케이션은?

입금액이����������� ������������������  결제금액보다����������� ������������������  크면����������� ������������������  VirtualAccountCancelService의����������� ������������������  ����������� ������������������  refundVirtualAccount()를����������� ������������������  호출합니다

입금액이����������� ������������������  결제금액보다����������� ������������������  작으면����������� ������������������  ����������� ������������������  VirtualAccountCancelService의����������� ������������������  ����������� ������������������  cancelOrder()를����������� ������������������  ����������� ������������������  상품을����������� ������������������  전체����������� ������������������  취소한����������� ������������������  후����������� ������������������  refundVirtualAccount()를����������� ������������������  호출해서����������� ������������������  입금����������� ������������������  금액����������� ������������������  전체를����������� ������������������  환불합니다

환불����������� ������������������  금액은����������� ������������������  ����������� ������������������  RefundDao를����������� ������������������  통해����������� ������������������  ����������� ������������������  DB에����������� ������������������  저장됩니다

코드를����������� ������������������  기반으로����������� ������������������  한����������� ������������������  커뮤니케이션은?

입금액이����������� ������������������  결제금액보다����������� ������������������  크면����������� ������������������  VirtualAccountCancelService의����������� ������������������  ����������� ������������������  refundVirtualAccount()를����������� ������������������  호출합니다

입금액이����������� ������������������  결제금액보다����������� ������������������  작으면����������� ������������������  ����������� ������������������  VirtualAccountCancelService의����������� ������������������  ����������� ������������������  cancelOrder()를����������� ������������������  ����������� ������������������  상품을����������� ������������������  전체����������� ������������������  취소한����������� ������������������  후����������� ������������������  refundVirtualAccount()를����������� ������������������  호출해서����������� ������������������  입금����������� ������������������  금액����������� ������������������  전체를����������� ������������������  환불합니다

환불����������� ������������������  금액은����������� ������������������  ����������� ������������������  RefundDao를����������� ������������������  통해����������� ������������������  ����������� ������������������  DB에����������� ������������������  저장됩니다

기술����������� ������������������  종속적인����������� ������������������  커뮤니케이션

도메인����������� ������������������  전문가와의����������� ������������������  커뮤니케이션����������� ������������������  불가능

전체����������� ������������������  품절����������� ������������������  

부분����������� ������������������  품절����������� ������������������  

입금����������� ������������������  금액����������� ������������������  >����������� ������������������  결제����������� ������������������  금액����������� ������������������  

입금����������� ������������������  금액����������� ������������������  <����������� ������������������  결제����������� ������������������  금액����������� ������������������   결제금액����������� ������������������  전체����������� ������������������  환불����������� ������������������  

결제금액����������� ������������������  부분����������� ������������������  환불����������� ������������������  

입금금액����������� ������������������  차액����������� ������������������  환불����������� ������������������  

입금금액����������� ������������������  전체����������� ������������������  환불����������� ������������������  취소����������� ������������������  없음����������� ������������������  

전체����������� ������������������  취소����������� ������������������  

부분����������� ������������������  취소����������� ������������������  

KcpController

processPayment()

VirtualAccountService

refundVirtualAccount() cancelOrder() RefundDao

Inert()

PaymentService

paymentTransaction() refundCash() applyDIscountCouponAndPoint() refundVirtualAccount()

개발자조차����������� ������������������  도메인����������� ������������������  개념과����������� ������������������  코드를����������� ������������������  머릿속에서����������� ������������������  ����������� ������������������  상호����������� ������������������  대응시켜야만����������� ������������������  코드의����������� ������������������  이해����������� ������������������  및����������� ������������������  수정이����������� ������������������  가능����������� ������������������  

Ubiquitous Language

Domain Model

Nowhere

63

코드는����������� ������������������  도메인의����������� ������������������  개념과����������� ������������������  도메인의����������� ������������������  언어를����������� ������������������  투영

부분����������� ������������������  품절����������� ������������������  

결제금액����������� ������������������  부분����������� ������������������  환불����������� ������������������  

부분����������� ������������������  취소����������� ������������������  

입금����������� ������������������  금액����������� ������������������  <����������� ������������������  결제����������� ������������������  금액����������� ������������������  

입금금액����������� ������������������  전체����������� ������������������  환불����������� ������������������  

전체����������� ������������������  취소����������� ������������������  

취소����������� ������������������  없음����������� ������������������  

입금����������� ������������������  금액����������� ������������������  >����������� ������������������  결제����������� ������������������  금액����������� ������������������   입금금액����������� ������������������  차액����������� ������������������  환불����������� ������������������  

전체����������� ������������������  품절����������� ������������������  

결제금액����������� ������������������  전체����������� ������������������  환불����������� ������������������  

도메인����������� ������������������  규칙

부분����������� ������������������  품절����������� ������������������  

결제금액����������� ������������������  부분����������� ������������������  환불����������� ������������������  

부분����������� ������������������  취소����������� ������������������  

입금����������� ������������������  금액����������� ������������������  <����������� ������������������  결제����������� ������������������  금액����������� ������������������  

입금금액����������� ������������������  전체����������� ������������������  환불����������� ������������������  

전체����������� ������������������  취소����������� ������������������  

취소����������� ������������������  없음����������� ������������������  

입금����������� ������������������  금액����������� ������������������  >����������� ������������������  결제����������� ������������������  금액����������� ������������������   입금금액����������� ������������������  차액����������� ������������������  환불����������� ������������������  

전체����������� ������������������  품절����������� ������������������  

결제금액����������� ������������������  전체����������� ������������������  환불����������� ������������������  

도메인����������� ������������������  규칙

CancelationRule

cancel(order)

NullCancelationRule

cancel(order)

FullCancelationRule

cancel(order)

PartialCancelationRule

cancel(order)

RefundCondition

check(order, deposit)

FullySOldOut

check(order, deposit)

ExceededDeposit

check(order, deposit)

PartiallySoldOut

check(order, deposit)

LackedDeposit

check(order, deposit)

RefundRule

refund(order, deposit)

PartialPayment RefundRule

refund(order, deposit)

DifferenceDeposit RefundRule

refund(order, deposit)

FullDeposit RefundRule

refund(order, deposit)

FullPayment RefundRule

refund(order, deposit)

도메인����������� ������������������  규칙

CancelationRule

cancel(order)

NullCancelationRule

cancel(order)

FullCancelationRule

cancel(order)

PartialCancelationRule

cancel(order)

RefundCondition

check(order, deposit)

FullySOldOut

check(order, deposit)

ExceededDeposit

check(order, deposit)

PartiallySoldOut

check(order, deposit)

LackedDeposit

check(order, deposit)

RefundRule

refund(order, deposit)

PartialPayment RefundRlke

refund(order, deposit)

DifferenceDeposit RefundRule

refund(order, deposit)

FullDeposit RefundRule

refund(order, deposit)

FullPayment RefundRule

refund(order, deposit)

=����������� ������������������  코드����������� ������������������  구조

코드를����������� ������������������  기반으로����������� ������������������  한����������� ������������������  커뮤니케이션은?

CancelationRule

Null CancelationRule

Full CancelationRule

Partial CancelationRule

RefundCondition

FullySOldOut

ExceededDeposit

PartiallySoldOut

LackedDeposit

RefundRule

PartialPayment RefundRlke

DifferenceDeposit RefundRule

FullDeposit RefundRule

FullPayment RefundRule

환불����������� ������������������  조건(RefundCondition)이����������� ������������������  입금초과(ExceededDeposit)라면����������� ������������������  입금차액����������� ������������������  환불규칙(DifferenceDepositRefundRule)에����������� ������������������  따라����������� ������������������  화불금액을����������� ������������������  계산한����������� ������������������  후����������� ������������������  ����������� ������������������  취소는����������� ������������������  하지����������� ������������������  않습니다(NullCancelationRule).

환불����������� ������������������  조건(RefundCondition)이����������� ������������������  전체����������� ������������������  품절(FullySoldOut)이라면����������� ������������������  결제금액을����������� ������������������  ����������� ������������������  전체����������� ������������������  환불(FullPaymentRefundRule)하고����������� ������������������  취소는����������� ������������������  하지����������� ������������������  않습니다(NullCancelationRule).����������� ������������������  

환불����������� ������������������  조건(RefundCondition)이����������� ������������������  부분����������� ������������������  품절(PartiallySoldOut)이라면����������� ������������������  결제금액을����������� ������������������  부분����������� ������������������  환불(PartialaymentRefundRule)하고����������� ������������������  전체����������� ������������������  주문을����������� ������������������  취소합니다(FullCancelationRule).����������� ������������������  

코드를����������� ������������������  기반으로����������� ������������������  한����������� ������������������  커뮤니케이션은?

환불����������� ������������������  조건(RefundCondition)이����������� ������������������  입금초과(ExceededDeposit)라면����������� ������������������  입금차액����������� ������������������  환불규칙(DifferenceDepositRefundRule)에����������� ������������������  따라����������� ������������������  화불금액을����������� ������������������  계산한����������� ������������������  후����������� ������������������  ����������� ������������������  취소는����������� ������������������  하지����������� ������������������  않습니다(NullCancelationRule).

환불����������� ������������������  조건(RefundCondition)이����������� ������������������  전체����������� ������������������  품절(FullySoldOut)이라면����������� ������������������  결제금액을����������� ������������������  ����������� ������������������  전체����������� ������������������  환불(FullPaymentRefundRule)하고����������� ������������������  취소는����������� ������������������  하지����������� ������������������  않습니다(NullCancelationRule).����������� ������������������  

환불����������� ������������������  조건(RefundCondition)이����������� ������������������  부분����������� ������������������  품절(PartiallySoldOut)이라면����������� ������������������  결제금액을����������� ������������������  부분����������� ������������������  환불(PartialaymentRefundRule)하고����������� ������������������  전체����������� ������������������  주문을����������� ������������������  취소합니다(FullCancelationRule).����������� ������������������  

도메인����������� ������������������  종속적인����������� ������������������  커뮤니케이션

도메인����������� ������������������  개념을����������� ������������������  기반으로����������� ������������������  한����������� ������������������  도메인����������� ������������������  전문가와의����������� ������������������  커뮤니케이션����������� ������������������  

전체����������� ������������������  품절����������� ������������������  

부분����������� ������������������  품절����������� ������������������  

입금����������� ������������������  금액����������� ������������������  >����������� ������������������  결제����������� ������������������  금액����������� ������������������  

입금����������� ������������������  금액����������� ������������������  <����������� ������������������  결제����������� ������������������  금액����������� ������������������   결제금액����������� ������������������  전체����������� ������������������  환불����������� ������������������  

결제금액����������� ������������������  부분����������� ������������������  환불����������� ������������������  

입금금액����������� ������������������  차액����������� ������������������  환불����������� ������������������  

입금금액����������� ������������������  전체����������� ������������������  환불����������� ������������������  

취소����������� ������������������  없음����������� ������������������  

전체����������� ������������������  취소����������� ������������������  

부분����������� ������������������  취소����������� ������������������  

도메인����������� ������������������  규칙을����������� ������������������  기술한����������� ������������������  도메인����������� ������������������  모델

71

전체����������� ������������������  품절����������� ������������������  

부분����������� ������������������  품절����������� ������������������  

입금����������� ������������������  금액����������� ������������������  >����������� ������������������  결제����������� ������������������  금액����������� ������������������  

입금����������� ������������������  금액����������� ������������������  <����������� ������������������  결제����������� ������������������  금액����������� ������������������   결제금액����������� ������������������  전체����������� ������������������  환불����������� ������������������  

결제금액����������� ������������������  부분����������� ������������������  환불����������� ������������������  

입금금액����������� ������������������  차액����������� ������������������  환불����������� ������������������  

입금금액����������� ������������������  전체����������� ������������������  환불����������� ������������������  

취소����������� ������������������  없음����������� ������������������  

전체����������� ������������������  취소����������� ������������������  

부분����������� ������������������  취소����������� ������������������  

CancelationRule

cancel(order)

NullCancelationRule

cancel(order)

FullCancelationRule

cancel(order)

PartialCancelationRule

cancel(order)

RefundCondition

check(order, deposit)

FullySOldOut

check(order, deposit)

ExceededDeposit

check(order, deposit)

PartiallySoldOut

check(order, deposit)

LackedDeposit

check(order, deposit)

RefundRule

refund(order, deposit)

PartialPayment RefundRuke

refund(order, deposit)

DifferenceDeposit Refund

refund(order, deposit)

FullDeposit RefundRule

refund(order, deposit)

FullPayment RefundRull

refund(order, deposit)

도메인����������� ������������������  모델을����������� ������������������  반영한����������� ������������������  코드

도메인����������� ������������������  모델과����������� ������������������  공용����������� ������������������  언어를����������� ������������������  바탕으로����������� ������������������  ����������� ������������������  코드의����������� ������������������  이해����������� ������������������  및����������� ������������������  ����������� ������������������  수정����������� ������������������  가능

Ubiquitous Language

Domain Model

모든����������� ������������������  커뮤니케이션과����������� ������������������  코드����������� ������������������  

based on

based on

74

코드와����������� ������������������  ����������� ������������������  도메인����������� ������������������  모델����������� ������������������  간의����������� ������������������  조화

Model-Driven Design

Part - 4

패����������� ������������������  ����������� ������������������  턴����������� ������������������  

Entity

속성이����������� ������������������  아닌����������� ������������������  연속성과����������� ������������������  식별성을����������� ������������������  기준으로����������� ������������������  정의되는����������� ������������������  ����������� ������������������  도메인����������� ������������������  객체����������� ������������������  

Value Object

식별성이����������� ������������������  아닌����������� ������������������  속성을����������� ������������������  이용해����������� ������������������  정의되는����������� ������������������  불변����������� ������������������  객체����������� ������������������  

79

상품����������� ������������������  주문����������� ������������������  도메인����������� ������������������  

Domain����������� ������������������  Layer����������� ������������������  

Order DealItem OptionItem

Payment Status

Delivery Payment

Deal Option *

* *

1

Discount Coupon

* 1 1

Entity����������� ������������������   Value����������� ������������������  Object����������� ������������������  &����������� ������������������  

Aggregate

연관된����������� ������������������  Entity와����������� ������������������  Value����������� ������������������  Object의����������� ������������������  묶음����������� ������������������  일관성과����������� ������������������  트랜잭션,����������� ������������������  분산의����������� ������������������  단위����������� ������������������  캡슐화를����������� ������������������  통한����������� ������������������  복잡성����������� ������������������  관리����������� ������������������  

Domain����������� ������������������  Layer����������� ������������������  

Order DealItem OptionItem

Payment Status

Delivery Payment

Deal Option *

* *

1

Discount Coupon

* 1

1

Aggregate����������� ������������������  

83

Factory

생성하기����������� ������������������  복잡한����������� ������������������  Aggregate����������� ������������������  내의����������� ������������������  여러����������� ������������������  객체들을����������� ������������������  동시에����������� ������������������  생성����������� ������������������  생성시����������� ������������������  Aggregate의����������� ������������������  일관성����������� ������������������  유지����������� ������������������  

Order DealItem OptionItem

Payment Status

Delivery Payment

Deal Option *

* *

1

Discount Coupon

* 1

1

Factory����������� ������������������  OrderFactory

DealFactory Domain����������� ������������������  Layer����������� ������������������  

85

Repository

생성된����������� ������������������  Aggregate에����������� ������������������  대한����������� ������������������  영속성����������� ������������������  관리����������� ������������������  조회,����������� ������������������  등록,����������� ������������������  수정,삭제����������� ������������������  시����������� ������������������  Aggregate의����������� ������������������  일관성����������� ������������������  유지����������� ������������������  In-memory����������� ������������������  data����������� ������������������  store처럼����������� ������������������  행동����������� ������������������  

Order DealItem OptionItem

Payment Status

Delivery Payment

Deal Option *

* *

1

Discount Coupon

* 1

1

Repository����������� ������������������  OrderFactory

DealFactory Deal Repositoty

Order Reposior

Domain����������� ������������������  Layer����������� ������������������  

87

Bounded Context

특정한����������� ������������������  Domain����������� ������������������  Model이����������� ������������������  적용되는����������� ������������������  제한된����������� ������������������  영역����������� ������������������  경계����������� ������������������  내에선����������� ������������������  동일한����������� ������������������  모델을����������� ������������������  일관되게����������� ������������������  적용����������� ������������������  경계����������� ������������������  밖의����������� ������������������  일관성은����������� ������������������  고려����������� ������������������  대상이����������� ������������������  아님����������� ������������������  

Order DealItem OptionItem

Payment Status

Delivery Payment

Deal Option *

* *

1

Discount Coupon

* 1

1

Bounded����������� ������������������  Context����������� ������������������  

OrderFactory

DealFactory Deal Repositoty

Order Reposior

Domain����������� ������������������  Layer����������� ������������������  

89

Service

Domain����������� ������������������  Object에����������� ������������������  위치시키기����������� ������������������  어려운����������� ������������������  오퍼레이션을����������� ������������������  가지는����������� ������������������  객체����������� ������������������  여러����������� ������������������  Domain����������� ������������������  Object를����������� ������������������  다루는����������� ������������������  연산����������� ������������������  Service의����������� ������������������  오퍼레이션은����������� ������������������  일반적으로����������� ������������������  stateless����������� ������������������  

Order DealItem OptionItem

Payment Status

Delivery Payment

Deal Option *

* *

1

Discount Coupon

* 1

1

Service����������� ������������������  

OrderFactory

DealFactory Deal Repositoty

Order Reposior

Domain����������� ������������������  Layer����������� ������������������  

RefundService

Part - 5

결����������� ������������������  ����������� ������������������  론����������� ������������������  

도메인-주도����������� ������������������  설계에����������� ������������������  관한����������� ������������������  오해

Entity Value Object

Aggregate

Repository

Factory

Service

JUST PATTERNS

도메인에����������� ������������������  집중하고����������� ������������������  ����������� ������������������  도메인의����������� ������������������  개념을����������� ������������������  ����������� ������������������  

커뮤니케이션과����������� ������������������  코드로����������� ������������������  ����������� ������������������  부드럽게����������� ������������������  연결시키려는����������� ������������������  ����������� ������������������  

과정이����������� ������������������  도메인-주도����������� ������������������  설계의����������� ������������������  해심

기술이����������� ������������������  아닌����������� ������������������  도메인의����������� ������������������  소리에����������� ������������������  귀����������� ������������������  기울여라

95

Thank you

top related