새로운 모델과 레거시 사이에 translation이 필요할 경우 어디에 둘것인가를 고민하게 된다.
Context 를 넘나드는 슈퍼 모델은 문제가 생길 가능성이 많아 진다.
굵은 글씨는 내가 표시를 해봤다.
A decision was made up front that the new model would depart from that of the legacy, so the legacy cargotracking system is outside the boundary. Necessary translation between the new model and the legacy is to be the responsibility of the legacy maintaince team. The translattion mechanism is not driven by the model. It is not in the BOUNDED CONTEXT. It is good that translation is out of CONTEXT. It would be unrealistic to ask the legacy team to make any real use of the model because their primary work is out of CONTEXT.
- DomainDrivenGesign by Eric Evans
좀더 이 원칙을 확장을 해서 생각을 해보면, 컨텍스트와 레이어가 틀린 경우 클라이언트 모델에 따라서 변환이 필요한 경우가 있다.
이 때 translation을 하는 로직을 어디에 둘지 고민이 많은데, 기본적인 원칙은 모델에 두는 것보다 별도로 translation을 하는 책임을 가지고 있는 것이 좋겠다.
DDD책을 보면서 패러다임이 많이 바뀌었는데, 내가 잘못 이해를 한것이 아닌가 고민스러울때가 있었다.
spring2.0 overview를 통해서 DDD를 나에게 알려주었던 국내에 DDD전도사 토비님이 이번에는 The Spring Experience2006까지 가셔서 많은 정보들을 블로그에 포스팅을 하고 있습니다.
토비님 블로그에서 다음과 같은 정리는 내가 제대로 이해는 했다는 생각을 갖게 했다. 당연한 이야기지만, 어떤식으로 엔트리 포인트를 정할 것인가? 관계를 어떻게 가져가야 정말 우리가 원하는 Rich한 모델을 만들수가 있는가? 개발을 하다가 보면 고민이 많다.
사실, 개발하면서 처음 생각한 디자인하고, 계속 달라지는 느낌도 많이 받았다. 물론, 개발자와 domain expert와 대화를 하면서, 풀어나간 Eriv Evans의 이야기들처럼 누군가의 대화는 아니었지만, 나 자신이 하면서 좀더 스키마가 생기면서 바뀌는 코드들의 느낌이라고 할수 있다.
또 한가지 강조한 것은 Entity, Value Object, Service를 잘 구분하는 것이다. 특히 Entity와 immutable한 VO를 모델에서 적절하게 선별해 내는 능력이 중요하다. Entity중에서 root역할을 하는 것을 aggregate entity라고 한다. Serivce layer에서는 주로 이 aggregate entity를 이용해서 domain layer에 접근을 한다. 동시에 repository가 매칭되는 기준이 되기도 한다.
aggregate entity는 너무너무 중요하다. service layer의 인터페이스에는 거의 aggregate entity가 보일 것이기 때문에 aggregate entity를 distill하는 것은 자연스럽게 인터페이스 설계에 반영이 되기 때문일 것이다.
DDD에 대한 흥미로운 대화(토비님과) http://younghoe.info/362 토비님과 영회님 두분 메신져로는 이렇게 훌륭한 대화를 할수 있다니, 정말 못말리는 두분이네요. 정말 흥미로운 대화입니다.Kent Beck이 DDD를 극찬을 했다는 얘기는 DDD Beliver들에게 더 힘을 실어주는 이야기군요.
제가 막연하게 생각했던 이야기를 대화를 통해서 잘 풀어주셨네요.
Toby님의 말: Eric이 강조한 것은 Modeling은 그 목적을 분명하게 가지는게 중요하다는 겁니다. Toby님의 말: Keith는 그것을 영화를 만드는 것에 비유하기도 했죠 Toby님의 말: 하나의 팩트를 가지고도 다양한 영화를 만드는 것처럼. [永會] 님의 말: 영화요? Toby님의 말: real world의 특별한 관점을 가진 snapshot이라는 뜻이죠 [永會] 님의 말: 아.. 모델링이 스냅샷이라구요 Toby님의 말: 네.. 목적을 가진 스냅샷이죠. Toby님의 말: 목적에 따라서 다양한 모델이 나올 수도 있다는 거고요 [永會] 님의 말: 네.. 목적..
영어가 좀되고, Spring Experience에 참가해서 실시간으로 포스팅을 하는 토비님이 부럽기도 하다. 내년에는 정말 열심히 영어공부를 해서, 빠른 시간이내에 해외 컨퍼런스에 가서 같이 얘기를 하고 싶다.