Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Java
- hadoop
- elasticsearch
- nginx
- Spring Batch
- SBT
- Spring Boot
- Angular2
- Storm
- Gradle
- Spring XD
- 엘라스틱서치
- Hbase
- design pattern
- intellij
- spark
- Domain Driven Design
- elastic search
- hdfs
- DDD
- 스프링 배치
- scala
- apache storm
- 제주
- hibernate
- docker
- Clean Code
- 도메인주도설계
- Spring
- Linux
Archives
- Today
- Total
욱'S 노트
DDD - 지식 탐구 본문
효과적인 모델링의 요소
모델과 구현의 연계 - 반복주기 내내 연결고리를 유지해야 한다.
모델을 기반으로 하는 언어 정제 - 누구라도 모델의 내용을 별도 해석 없이 이해할 수 있어야 한다.
풍부한 지식이 담긴 모델 - 데이터 스키마뿐만 아니라 행위와 규칙까지 모두 표현
모델의 정제 - 중요한 개념은 계속해서 더해져야 하며, 쓸모가 없어진 개념은 제거되어야 한다.
브레인스토밍과 실험 - 계속해서 토의해야 하며 실험실로 옮겨 테스트를 해야 한다.
지식탐구
폭포수개발 방식 - 업무전문가 -> 분석가 -> 프로그래머, 피드백이 전혀 없어 실패할 수 밖에 없음
이터레이션 방식 - 모델을 만들지 않음. 추상화가 되지 않아 지식 축적이 실패. 모델과 구현이 떨어짐
즉 업무전문가, 분석가, 프로그래머가 함께 모델을 만들어야 하며 이렇게 해야 모델은 더욱 명료해지며 구현은 더욱 용이해진다.
그리고 우리는 소프트웨어를 작성할때 충분히 알지 못한 상태에서 시작한다. 우리는 스스로 얼마나 알지 못하는가을 알지도 못할때도 있다. 그러므로 우리는 항상 지속적인 학습을 수행해야 한다.
풍부한 지식이 담긴 설계
public class BookingService {
public int makeBooking(Cargo cargo, Voyage voyage) {
double maxBooking = voyage.getCapacity() * 1.1;
if (voyage.getBookedCargoSize() + cargo.getSize() > maxBooking)
return -1;
return cargo.getSize();
}
}
위의 예는 일반적인 화물운송예약에 구현을 단순화 한것이다. 위의 클래스 다이어그램에서는 한가지 부족한 점이 보이는데, 그것은 초과 예약이 가능하다는 것이다. 이러한 지식을 설계에 좀더 반영한다면 다음과 같이 될 것이다.
public int makeBooking(Cargo cargo, Voyage voyage) {
if (overbookingPolicy.isAllowed(cargo, voyage)) return -1;
return cargo.getSize();
}
즉 불분명한 개념은 모델로 도출되어야 하며, 프로그래머는 업무전문가에서 기술적 산출물, 심지어는 코드까지도 보여줄수 있어야 한다.
'Methdology > Domain Driven Design' 카테고리의 다른 글
DDD - 모델 주도 설계 (0) | 2016.01.27 |
---|---|
DDD - 의사소통과 언어 사용 (0) | 2016.01.27 |
DDD - 도메인 모델이란? (0) | 2016.01.27 |
DDD - Model Driven Design (0) | 2015.04.16 |
DDD - Ubiquitous Language (0) | 2015.02.09 |
Comments