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

Ddd 14장

  • Upload
    dagri82

  • View
    580

  • Download
    4

Embed Size (px)

Citation preview

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

2011. 9. 24, 최기원

제4 부

젂략적 설계

개별 객체 -> 컨텍스트개인 : 개인 -> 팀 : 팀 정치

설계 단위의변화에따른 젂략들

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

14장

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

컨텍스트는 코드의 특정 부분일 수도, 개별 팀이 수행하는 업무일 수도 있다.

프로젝트가 작을때

객체

응집도를 높이고결합도를 낮추자

객체

객체

프로젝트가 커지면

객체

객체

객체

객체

객체 객체

객체객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체객체

객체

객체

객체

객체객체

객체

객체

객체

객체

객체

객체

객체

객체객체

객체

객체

객체

객체

객체

객체

객체

객체

객체객체

객체

객체

객체

객체

객체 객체

객체

객체 객체

객체

객체객체

객체

객체 객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체객체

객체

객체

객체객체

객체

객체

객체

객체

객체객체

객체 객체객체

객체

객체

객체

객체

객체

객체

객체객체

모델에 맞춰 의미 있게 묶자

객체

객체 객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체 객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체객체

객체

객체객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체 객체

객체

객체 객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체

객체객체

객체

객체

객체

객체객체

객체객체

객체

객체객체

객체

객체

객체

객체

객체

객체

Bounded Context라 하자

객체

객체

객체

객체

객체

객체객체

객체

객체

객체

객체객

체객체 ㄴ

ㄴ객체객체

객체 객

객체

객체객

체객체객

체객체 객

객체

객체

객체

객체 객

체객체

객체

객체객체

객체객

체 객체객체

객체

객체

객체

객체객체

객체

객체객

객체객체

객체

객체

객체

객체객체

객체

객체

객체

객체객

객체 객

객체

객체

객체객

객체

객체

객체 객

체객체

객체

객체

객체 객

체 객체

객체

객체객

객체객체객체

객체객체

객체 객

체객체

객체

객체객체

객체객

체 객체

객체 객

객체

객체

객체

객체

객체

객체

객체

Bounded Context 별로명확한 의미를 부여한다.

이름을 붙인다.Ubiqiutous language로 사용

경계를 명확히 한다.모델에 일치시킨다.

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

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

개발자는 Context만 신경 쓰면 된다.Context의 통합에는 번역이 필요하다.

화물 예제 – 1/2

화물 예약 컨텍스트 (팀)화물 추적 컨텍스트 (팀)화물 운항 컨텍스트 (팀)

팀별로 Bounded Context를 명확히 한다.인터페이스를 맞춘다.코드를 공유하지 않는다.

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

결합할 때의 문제점

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

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

개발이 진행됨에 따라

Context의 의미가 모델과 달라진다.Context내에서 중복된 개념이 생긴다.Context 밖의 개념을 고려하기 시작한다.

지속적인 통합을 한다.

개념의 통합Ubiquitous Language를 지속적으로 사용한다.‚조지 팀에서 만든 것이 변경될 예정이므로 그에 따라 저희 것도 변경할 예정입니다.‛‚운송망 모델이 바뀌고 있습니다. 그러니 저희도 예약 컨텍스트에 대한 번역기를 변경할 예정입니다.‛

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

Context Map컨텍스트 간의 관계도(지도)Context의 이름을 쓴다.Context간의 관계를 표현한다.현재 상태 그대로의 상황을 표현한다. 유지한다.모든 이들이 경계가 어디에 위치하는지 알 수 있도록 공표한다.Map을 보면 바꾸고 싶어진다. 심사숙고 해야 한다.

화물 예제 – 2/2

예제) 화물... ㅡㅡ;

화물 예약 팀화물 추적 팀화물 운항 일정 관리 팀

팀별로 Bounded Context를 명확히 한다.인터페이스를 맞춘다.코드를 공유하지 않는다.

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

ㄴ예제, 화물 ㅡㅡ;;

예약 Context

일정

화물 항로 명세

구간

Route Specification -> locationCodesItinerary <- Node ID의 List

Route Specification -> locationCodes

Node ID의 List -> Itinerary

배 항해 ID

컨텍스트 간에는 의사소통이 활발하지 않다.번역기는 TDD를 해야 한다.

모델을컨텍스트화하는하나의예시

코끼리통일하기

맙소사! 코끼리는벽처럼 생겼네!

알겠다. 코끼리는뱀같이 생겼어.

정말 이상한 동물일세. 정말 평범해. 코끼리는꼭 나무 같이 생겼어

알겠다. 코끼리는밧줄같이 생겼어!

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

코끼리를한쪽끝에는밧줄이있고다른쪽에는뱀이있는, 나무기둥이떠받치고있는벽으로간주하는것이적합할지도모른다.

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

Context(팀)간의 관계 패턴

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

공유하기로 한 도메인 모델의 부분집합을 명시협의 없이 변경할 수 없다.주기적으로 통합한다.

갑/을 관계의 팀 단방향 의졲갑의 요구사항이 가장 중요하다갑의 코드는 테스트 스위트를 마련

예제)수송단가 분석 vs 예약

갑/을 관계의 팀에서‘을’을 맹목적으로 신뢰

갑/을 관계의 팀에서‘을’을 어느 정도만 신뢰

중간 레이어를 거친다.번역기

갑/을 관계의 팀에서을을 버린 갑.

컨텍스트

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

번역기번역기 번역기

컨텍스트

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

번역기

번역기 대신(XML과 같은) 도메인 정보를 표현할 수 있는 공유 언어를사용 하는 관계

변형 : 리펙토링

병합

병합

폐기

레거시 시스템

공식화

질문?