49
도메인 주도 설계 14, 모델의 무결성 유지 2011. 9. 24, 최기원

D.D.D. 14장

  • Upload
    dagri82

  • View
    369

  • Download
    2

Embed Size (px)

Citation preview

Page 1: D.D.D. 14장

도메인 주도 설계14장, 모델의 무결성 유지

2011. 9. 24, 최기원

Page 2: D.D.D. 14장

제 4 부

전략적 설계

개별 객체 -> 컨텍스트

개인 : 개인 -> 팀 : 팀 정치설계 단위의 변화에 따른 전략들

14장. 모델의 무결성 유지 15장. 디스틸레이션 16장. 대규모 구조

17장. 전략의 종합

Page 3: D.D.D. 14장

14장

Page 4: D.D.D. 14장

1부 14장의 주요 개념

Page 5: D.D.D. 14장
Page 6: D.D.D. 14장

모델은 컨텍스트에 적용된다.

컨텍스트는 코드의 특정 부분일 수도,

개별 팀이 수행하는 업무일 수도 있다.

Page 7: D.D.D. 14장

프로젝트가 작을때

객체

응집도를 높이고

결합도를 낮추자객체

객체

Page 8: D.D.D. 14장

프로젝트가 커지면

객체

객체

객체

객체

객체 객체

객체객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체객체

객체

객체

객체

객체객체

객체

객체

객체

객체

객체

객체

객체

객체객체

객체

객체

객체

객체

객체

객체

객체

객체

객체객체

객체

객체

객체

객체

객체 객체

객체

객체 객체

객체

객체객체

객체

객체 객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체객체

객체

객체

객체객체

객체

객체

객체

객체

객체객

객체 객체객체

객체

객체

객체

객체

객체

객체

객체객체

Page 9: D.D.D. 14장

모델에 맞춰 의미 있게 묶자

객체

객체 객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체 객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체객체

객체

객체객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체 객체

객체

객체 객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체객체

객체

객체

객체

객체객

객체객체

객체

객체객체

객체

객체

객체

객체

객체

객체

Page 10: D.D.D. 14장

Bounded Context라 하자

체객

체객

체객

체객

체객

체 ㄴㄴ

체객

체 객

체객

체객

체객

체 객

체 객

체객

체객

체객

체객

체 객

체객

체객

체객

체객

체객

체객

체객

체 객

체객

체 객

체 객

체 객

체객

체객

체객

체객

체 객

체객

체객

체객

체객

체객

체 객

체 객

체객

Bounded Context 별로

명확한 의미를 부여한다.

이름을 붙인다.

Ubiqiutous language로 사용

경계를 명확히 한다.

모델에 일치시킨다.

Page 11: D.D.D. 14장

응집도가 높아진다. ... 우연 응집도 -> 기능 응집도

결합도가 낮아진다. ... 내용 결합도 -> 데이터 결합도

개발자는 Context만 신경 쓰면 된다.

Context의 통합에는 번역이 필요하다.

Page 12: D.D.D. 14장

화물 예제 – 1/2

Page 13: D.D.D. 14장

화물 예약 컨텍스트 (팀)

화물 추적 컨텍스트 (팀)

화물 운항 컨텍스트 (팀)

팀별로 Bounded Context를 명확히 한다.

인터페이스를 맞춘다.

코드를 공유하지 않는다.

Context의 경계는 번역 프로그램을 따로 만든다.

Page 14: D.D.D. 14장

결합할 때의 문제점

중복된 개념서로 다른 말을 하고 있지만 같은 의미

허위 동족 언어서로 같은 말을 하고 있지만 다른 의미

Page 15: D.D.D. 14장
Page 16: D.D.D. 14장

개발이 진행됨에 따라

Context의 의미가 모델과 달라진다.

Context내에서 중복된 개념이 생긴다.

Context 밖의 개념을 고려하기 시작한다.

Page 17: D.D.D. 14장

지속적인 통합을 한다.

개념의 통합Ubiquitous Language를 지속적으로 사용한다.“조지 팀에서 만든 것이 변경될 예정이므로 그에 따라 저희 것도 변경할 예정입니다.”

“운송망 모델이 바뀌고 있습니다. 그러니 저희도 예약 컨텍스트에 대한 번역기를 변경

할 예정입니다.”

구현의 통합단계적이고 재생 가능한 병합/빌드

TDD

Page 18: D.D.D. 14장
Page 19: D.D.D. 14장

Context Map

컨텍스트 간의 관계도(지도)Context의 이름을 쓴다.

Context간의 관계를 표현한다.

현재 상태 그대로의 상황을 표현한다. 유지한다.

모든 이들이 경계가 어디에 위치하는지 알 수 있도

록 공표한다.

Map을 보면 바꾸고 싶어진다. 심사숙고 해야 한다.

Page 20: D.D.D. 14장

화물 예제 – 2/2

Page 21: D.D.D. 14장

예제) 화물... ㅡㅡ;

화물 예약 팀

화물 추적 팀

화물 운항 일정 관리 팀

팀별로 Bounded Context를 명확히 한다.

인터페이스를 맞춘다.

코드를 공유하지 않는다.

Context의 경계는 번역 프로그램을 따로 만든다.

Page 22: D.D.D. 14장

예제, 화물 ㅡㅡ;;

예약 Context

일정

화물 항로 명세

구간

Page 23: D.D.D. 14장

Route Specification -> locationCodes

Itinerary <- Node ID의 List

Page 24: D.D.D. 14장

Route Specification -> locationCodes

Page 25: D.D.D. 14장

Node ID의 List -> Itinerary

배 항해 ID

Page 26: D.D.D. 14장
Page 27: D.D.D. 14장
Page 28: D.D.D. 14장

컨텍스트 간에는 의사소통이 활발하지 않다.

번역기는 TDD를 해야 한다.

Page 29: D.D.D. 14장

모델을 컨텍스트화 하는

하나의 예시

코끼리 통일하기

Page 30: D.D.D. 14장

맙소사! 코끼리는

벽처럼 생겼네!

알겠다. 코끼리는

뱀같이 생겼어.

정말 이상한 동물일세.

정말 평범해. 코끼리는

꼭 나무 같이 생겼어

알겠다. 코끼리는

밧줄같이 생겼어!

Page 31: D.D.D. 14장
Page 32: D.D.D. 14장

상상력과 지속적인(아마도 열띤) 토론을 거친

Page 33: D.D.D. 14장

코끼리를 한쪽 끝에는 밧줄이 있고 다른 쪽에는 뱀이 있

는, 나무기둥이 떠받치고 있는 벽으로 간주하는 것이 적합할

지도 모른다.

Page 34: D.D.D. 14장

코끼리는 동물의 특성을 가졌을꺼야

Page 35: D.D.D. 14장

Context(팀)간의 관계 패턴

2부

Page 36: D.D.D. 14장

팀 사이에 모델 공유를 사용하는 패턴

Page 37: D.D.D. 14장

갑/을 관계의 팀

단방향 의존

Page 38: D.D.D. 14장

갑/을 관계의 팀에서

„을‟을 전적으로 신뢰

Page 39: D.D.D. 14장

갑/을 관계의 팀에서

„을‟을 어느 정도만 신뢰

Page 40: D.D.D. 14장

갑/을 관계의 팀에서

을을 버린 갑.

Page 41: D.D.D. 14장

컨텍스트

컨텍스트 컨텍스트 컨텍스트

번역기번역기 번역기

Page 42: D.D.D. 14장

컨텍스트

컨텍스트 컨텍스트 컨텍스트

번역기

Page 43: D.D.D. 14장

번역기 대신

(XML과 같은) 도메인 정보를 표현할 수 있는 공유 언어를

사용 하는 관계

Page 44: D.D.D. 14장

변형 : 리펙토링

. Separate ways -> Shared Kernel

. Shared Kernel -> Continous Integration

. 레거시 시스템의 단계적 폐기

. Open Host Service -> Published Language

Page 45: D.D.D. 14장

병합

Page 46: D.D.D. 14장

병합

Page 47: D.D.D. 14장

폐기

레거시 시스템

Page 48: D.D.D. 14장

공식화

Page 49: D.D.D. 14장

질문?