Domain driven design 8장

18
Domain Driven Design 8이수안([email protected] ) 아꿈사(café.naver.com/architect1)

Transcript of Domain driven design 8장

Page 1: Domain driven design 8장

Domain Driven Design

8장

이수안([email protected])

아꿈사(café.naver.com/architect1)

Page 2: Domain driven design 8장

더 심층적인 통찰력을 향한 리팩

토링

3장 소개

Page 3: Domain driven design 8장

우리가 알고 있는 리팩토링

"매우 상세한 수준에서 코드의 가독성을 높이

거나 개선하려는 기계적인 변경에 초점을

맞춘다"

Page 4: Domain driven design 8장

Refactoring

• 마이크로 리팩토링 카

탈로그

• 코드 자체에서 발견되

는 문제를 해결하는 것

이 목표

Page 5: Domain driven design 8장

패턴을 활용한 리팩토링

• 개발자가 디자인 패턴

을 적용해야 한다고 판

단 했을 때 따라야 할

리팩토링 절차에 대한

높은 수준 목표 제시

• 설계 품질을 기술적 관

점에서 바라봄

Page 6: Domain driven design 8장

심층 모델을 향한 리팩토링

• What?

– 시스템의 생존력에 가장 큰 영향을 미치는 리팩토링

• When ?

– 도메인에 대한 새로운 통찰력을 얻었을 때 수행

• How ?

– 코드를 사용해 모델이 표현하고자 하는 바를 명확하게드러내고자 수행

– 리팩토링의 목표는 개발자가 단순히 코드가 수행 하는바를 이해하는 것뿐만 아니라 왜 그렇게 수행 되는지를이해하고 도메인 전문가와 의사소통에 이를 연결 시키는 것이다.

Page 7: Domain driven design 8장

심층 모델(Deep Model)이란?

• 도메인의 피상적인 측면을 배제하고 도메인전문가의 주요 관심사와 가장 적절한 지식을알기 쉽게 표현하는 모델

• 추상적인 요소를 포함하지만 문제의 핵심을관통하는 구체적인 요소를 포함

예) 선박과 컨테이너가 포함된 객체 모델 초기 아이디어로 사용 -> 여러번의 반복주기-> 선박운항 과"선하증권" 모델 부각

(선백/컨테이너는 모델에 누락)

Page 8: Domain driven design 8장

심층 모델/유연한 설계

• 지속적 리팩토링을 수행하려면 설계 자체

가 변경을 지원 해야 됨

• "유연한 설계"(supple design)와 이를 달성

하기 위한 접근법 10장에서 소개

예)낡은 야구글러브

– 구부러지는 지점 유연해짐

- 그 외 부분은 딱딱해서 손을 보호출처 : http://suhyeonkwon.blog.me/100099740800

Page 9: Domain driven design 8장

발견과정

• 9장 "암시적인 개념을 명시적으로 "

– 도메인의 중심 개념을 담고 있는 모델을 확보하고 설계에 반영하는 법

• 10장 "유연한 설계“

– 유연하고 쉽게 확장할 수 있는 소프트웨어를작성하는 방법

• 11장 ~12장

– 분석 패턴과, 디자인 패턴을 적용하는 방법을설명

Page 10: Domain driven design 8장

8장 도약 사례 소개

Page 11: Domain driven design 8장

리팩토링 효과

• 서서히 습득한 지식은

소규모 리팩토링을 통

해 드러난다

• 쌓인 지식은 어느 순간

중요한 통찰로서 프로

젝트 전체에 영향을 미

친다

Page 12: Domain driven design 8장

도약의 사례소개

• 여러 대출회사가 모여 퍼실리티(facility)를 지원할 지원할 자금을 공동으로 출자하는 채권은행단 구현

• 퍼실리티란?– 돈을 대출해 줄 회사와의 매매 계약

– 신용카드 예• 신용카드 한도 : 사전 협의된 금액까지 빌릴 수 있는 퍼

실리티

• 신용카드 사용의 미 청구 금액은 퍼실리티에 대한 차용액이 되며 대출 총액을 증가시킴

Page 13: Domain driven design 8장

서서히 지식 쌓아가기

1. 대출 회사 지분이 고정적이라는 가정

2. but. 대출금 제공 받은 투자 회사는 일반적으로 더 많은 지분에 해당 하는 금액을 제공할 수 있음

• 핵심을 관통 하지 못하여 알고리즘은 복잡해지고 미묘한 반올림 불일치 문제 발생 됨

Page 14: Domain driven design 8장

도약

Page 15: Domain driven design 8장

PIE 그래프를 통한 새로

운 모델을 시각화 하고

다양한 시나리오 검증

Page 16: Domain driven design 8장

지분 총액(Share Pie)를

사용한 Loan 모델 생성

Page 17: Domain driven design 8장

결과

• 업무 전문가들도 쉽게 이해할 수 있는 모델

이 생김

• 복잡한 반올림 문제도 자동 해결 됨

심층모델의명확성/단순함

UBIUITUOS LANGUAGE

기반 의사소통

더 나은 모델링으로 도약

Page 18: Domain driven design 8장

정리

• 우리가 알고 있는 수준의 리팩토링은 코드레벨로 접근하는 마이크로리팩토링

• 보다 시스템의 생존력에 영향을 미칠 수 있는 큰 관점의 접근법을 심층 모델을 향한 리팩토링

• 심층 모델은 핵심을 관통하는 구체적인 요소를 포함하면서 알기 쉽게 표현한 모델

• 심층 모델의 발견과정은 기반 지식을 쌓다어느순간 도약 시점을 거쳐 발견하게 된다.