-
2부. 소프트웨어에서 표현되는 모델 : 연관 관계(association)Domain Driven Design 2021. 3. 15. 02:09
이전 포스팅 : [Domain Driven Design] - 2부 모델 주도 설계의 기본 요소
2부 모델 주도 설계의 기본 요소
소프트웨어를 올바르게 구현하고 모델과의 밀접한 관계를 유지하려면 모델링과 설계의 우수한 실천법들을 적용해야 한다. 도메인 주도 설계 과정을 탄력성 있게 만드려면 잘 알려진 근본 원리
sungman.tistory.com
모델과 구현은 상세한 수준에서 연결돼야 한다.
객체 간의 연관관계를 이해하고 묘사하는 것이 간단할 수 있지만 실제 구현하기에는 어려운 문제일 수 있다.
상세한 구현 결정은 Model-Driven-Design을 실현하는데 엄청 중요하고, 연관관계가 토대가 된다.
책의 해당 장에서는 객체 간의 연관관계를 설계하고 합리적으로 구성하는 것에 대한 얘기로 시작하여, 모델을 표현하는 세 가지 패턴 Entity, Value Object, Service를 구분하여 설명하고 마지막으로 Module에 대해 얘기하고 마친다.
연관관계 association
여러 객체 간의 연관관계를 모델링하고, 이를 구현으로 연결시키는 것은 마냥 쉬운 일은 아니다.
현실세계에는 수많은 다대다(many to many) 연관관계가 존재하고, 그 중 상당수는 양방향으로 나타난다. 그러나 이러한 모든 관계들을 모두 유지할 필요 없이 추상화를 통해 중요하거나 필요한 관계를 뽑아 구성해야 한다.
연관관계 구성 방법
- 탐색 방향을 부여한다.
- 한정자(qualifier)를 추가해서 사실상 다중성(multiplicity)을 줄인다.
- 중요하지 않은 연관관계를 제거한다.
나라와 사람이라는 모델을 예를 들어보자
각 나라에는 수많은 사람들이 있다. 그리고 현대의 대부분의 민주주의 나라에는 대통령이 존재하고, 역대 대통령의 수는 1~N명일 것이다. 그리고 이는 양방향적인 연관관계이다.
아래 그림의 왼쪽과 같은 관계로 표현될 것이다.
여기에서 (1.) 방법을 적용해보자
1부에서 얘기했듯이 말로 표현한다면 쉽게 적용할 수 있다.
"대한민국의 대통령은 누구인가?"
"문재인이 대통령인 나라는 어디인가?"
위의 두 문장 중 더 일반적으로 사용되는 질문은 어떤 문장인가?
대통령의 이름을 알면서 그 나라를 묻는 질문을 하진 않을 것이다. 그렇다면 우리는 나라에서 사람으로의 단방향 연관관계로 수정할 수 있다. 그리고 이 변경은 도메인에 대한 통찰력을 바탕으로 이루어졌고 한쪽 방향으로의 관계가 더 중요하다는 것을 의미한다고 볼 수 있다.
도메인의 특징을 탐색 방향에 반영한 연관관계 연관관계는 가능한 만큼 관계를 제약하는 것이 중요하다. 이번엔 (2.) 방법을 적용하여 관계에 제약을 더 걸어보도록 하자
나라에는 역대 대통령들이 존재한다. 더 자세히 생각해본다면, 우리 모두는 알고 있다. 기간에 따라 교체되어 역대 대통령은 여러 명일 수 있겠지만 지금 이 순간 우리나라, 일본, 미국의 대통령은 한 명이다.
이렇게 도메인에 대해 깊이 있게 이해할수록 한정적인(qualified) 관계에 아주 빈번하게 마주하게 된다. 한정자는 다중성을 일대일로 줄이고, 중요한 규칙을 명시적으로 모델에 포함시킨다.
모델에 포함시킨 규칙을 질문으로 말해보자, 다음과 같을 것이다.
"2021년 대한민국의 대통령은 누구인가?"
"2010년 대한민국의 대통령은 누구였나?"제약이 추가된 연관관계 제약이 더해질수록 연관관계는 더 많은 지식과 실제적인 설계를 보여준다는 것을 명심하도록 하자
결국 더 많은 지식과 실제적인 설계는 구현을 더욱 쉽게 만들어준다.
글이 길어져 다음 글에서 이어 Entity, Value Object, Service, Module 에 대해 다뤄보도록 하자
다음글 : [Domain Driven Design] - 2부. 소프트웨어에서 표현되는 모델 : 엔티티, 값 객체 (Entity, Value Object)
2부 모델 주도 설계의 기본 요소 - 표현 모델 (Entity, Value Object)
2021.03.15 - [Domain Driven Design] - 2부 모델 주도 설계의 기본 요소 - 표현 모델 (연관관계) 2부 모델 주도 설계의 기본 요소 - 표현 모델 (연관관계) 모델과 구현은 상세한 수준에서 연결돼야 한다. 객체
sungman.tistory.com
'Domain Driven Design' 카테고리의 다른 글
2부. 소프트웨어에서 표현되는 모델 : 서비스(Service) (0) 2021.03.28 2부. 소프트웨어에서 표현되는 모델 : 엔티티, 값 객체 (Entity, Value Object) (0) 2021.03.16 2부 모델 주도 설계의 기본 요소 (0) 2021.03.07 1부 동작하는 도메인 모델 만들기(2) - 의사소통과 언어 사용 (0) 2021.02.27 1부 동작하는 도메인 모델 만들기(1) - 지식 탐구 (0) 2021.02.16