domain driven design 8장
TRANSCRIPT
더 심층적인 통찰력을 향한 리팩
토링
3장 소개
우리가 알고 있는 리팩토링
"매우 상세한 수준에서 코드의 가독성을 높이
거나 개선하려는 기계적인 변경에 초점을
맞춘다"
Refactoring
• 마이크로 리팩토링 카
탈로그
• 코드 자체에서 발견되
는 문제를 해결하는 것
이 목표
패턴을 활용한 리팩토링
• 개발자가 디자인 패턴
을 적용해야 한다고 판
단 했을 때 따라야 할
리팩토링 절차에 대한
높은 수준 목표 제시
• 설계 품질을 기술적 관
점에서 바라봄
심층 모델을 향한 리팩토링
• What?
– 시스템의 생존력에 가장 큰 영향을 미치는 리팩토링
• When ?
– 도메인에 대한 새로운 통찰력을 얻었을 때 수행
• How ?
– 코드를 사용해 모델이 표현하고자 하는 바를 명확하게드러내고자 수행
– 리팩토링의 목표는 개발자가 단순히 코드가 수행 하는바를 이해하는 것뿐만 아니라 왜 그렇게 수행 되는지를이해하고 도메인 전문가와 의사소통에 이를 연결 시키는 것이다.
심층 모델(Deep Model)이란?
• 도메인의 피상적인 측면을 배제하고 도메인전문가의 주요 관심사와 가장 적절한 지식을알기 쉽게 표현하는 모델
• 추상적인 요소를 포함하지만 문제의 핵심을관통하는 구체적인 요소를 포함
예) 선박과 컨테이너가 포함된 객체 모델 초기 아이디어로 사용 -> 여러번의 반복주기-> 선박운항 과"선하증권" 모델 부각
(선백/컨테이너는 모델에 누락)
심층 모델/유연한 설계
• 지속적 리팩토링을 수행하려면 설계 자체
가 변경을 지원 해야 됨
• "유연한 설계"(supple design)와 이를 달성
하기 위한 접근법 10장에서 소개
예)낡은 야구글러브
– 구부러지는 지점 유연해짐
- 그 외 부분은 딱딱해서 손을 보호출처 : http://suhyeonkwon.blog.me/100099740800
발견과정
• 9장 "암시적인 개념을 명시적으로 "
– 도메인의 중심 개념을 담고 있는 모델을 확보하고 설계에 반영하는 법
• 10장 "유연한 설계“
– 유연하고 쉽게 확장할 수 있는 소프트웨어를작성하는 방법
• 11장 ~12장
– 분석 패턴과, 디자인 패턴을 적용하는 방법을설명
8장 도약 사례 소개
리팩토링 효과
• 서서히 습득한 지식은
소규모 리팩토링을 통
해 드러난다
• 쌓인 지식은 어느 순간
중요한 통찰로서 프로
젝트 전체에 영향을 미
친다
도약의 사례소개
• 여러 대출회사가 모여 퍼실리티(facility)를 지원할 지원할 자금을 공동으로 출자하는 채권은행단 구현
• 퍼실리티란?– 돈을 대출해 줄 회사와의 매매 계약
– 신용카드 예• 신용카드 한도 : 사전 협의된 금액까지 빌릴 수 있는 퍼
실리티
• 신용카드 사용의 미 청구 금액은 퍼실리티에 대한 차용액이 되며 대출 총액을 증가시킴
서서히 지식 쌓아가기
1. 대출 회사 지분이 고정적이라는 가정
2. but. 대출금 제공 받은 투자 회사는 일반적으로 더 많은 지분에 해당 하는 금액을 제공할 수 있음
• 핵심을 관통 하지 못하여 알고리즘은 복잡해지고 미묘한 반올림 불일치 문제 발생 됨
도약
PIE 그래프를 통한 새로
운 모델을 시각화 하고
다양한 시나리오 검증
지분 총액(Share Pie)를
사용한 Loan 모델 생성
결과
• 업무 전문가들도 쉽게 이해할 수 있는 모델
이 생김
• 복잡한 반올림 문제도 자동 해결 됨
심층모델의명확성/단순함
UBIUITUOS LANGUAGE
기반 의사소통
더 나은 모델링으로 도약
정리
• 우리가 알고 있는 수준의 리팩토링은 코드레벨로 접근하는 마이크로리팩토링
• 보다 시스템의 생존력에 영향을 미칠 수 있는 큰 관점의 접근법을 심층 모델을 향한 리팩토링
• 심층 모델은 핵심을 관통하는 구체적인 요소를 포함하면서 알기 쉽게 표현한 모델
• 심층 모델의 발견과정은 기반 지식을 쌓다어느순간 도약 시점을 거쳐 발견하게 된다.