-
2부 도메인 객체의 생명주기Domain Driven Design 2021. 4. 15. 00:53
이전 글 : 2021.04.05 - [Domain Driven Design] - 2부. 소프트웨어에서 표현되는 모델 : 모듈 (Module)
2부. 소프트웨어에서 표현되는 모델 : 모듈 (Module)
이전글 : 2021.03.28 - [Domain Driven Design] - 2부. 소프트웨어에서 표현되는 모델 : 서비스(Service) 2부. 소프트웨어에서 표현되는 모델 : 서비스(Service) [Domain Driven Design] - 2부. 소프트웨어에서..
sungman.tistory.com
지난번 모듈까지 다루며 연관관계, 엔티티, 값 객체, 서비스, 모듈을 통해 소프트웨어에서 표현되는 모델에 대해 알아보았다.
소프트웨어를 개발하면 이러한 객체 지향 시스템의 객체를 구성하는 데이터를 저장할 필요가 생긴다. 이때 흔히 사용되는 비객체기술인 관계형 데이터베이스이다.
이러한 객체를 저장하는 등의 객체의 생명주기 문제들을 도메인 주도 설계에서는 어떻게 다루는지 앞으로 알아보도록 한다.
도메인 객체의 생명주기
우리가 개발하는 소프트웨어의 모든 객체는 생명주기를 갖는다.
어떤 객체는 메소드 내에서 일시적으로 생성되어 어떠한 연산에 사용된 후 GC를 통해 삭제되기도 하고, 다른 객체는 생성되어 연산에 따라 몇 번의 상태의 변경을 거친 후 저장되거나 삭제되기도 한다.
그러나 어떤 객체들은 다른 객체와 복잡한 상호의존성을 가질 수 있고 여러 상태의 변화를 겪기도 하는데, 이때 많은 불변식들이 적용될 것이다. 이러한 객체들에 대한 관리를 적절히 할 수 있도록 모델 주도 설계, 도메인 주도 설계에서는 어떻게 해결할까?
도메인 객체의 관리에 관련된 문제
- 생명주기 동안의 무결성 유지하기
- 생명주기 관리의 복잡성으로 모델이 난해해지는 것을 방지하기
이번 주제인 '도메인 객체의 생명주기'에서 위의 2가지 문제를 해결하기 위해 3개의 패턴을 사용한다.
집합체(Aggregate), 팩토리(Factory), 레포지토리(Repository)
집합체 (Aggregate)
소유권과 경계를 명확히 정의함으로써 모델을 엄격하게 만들어 객체 간의 연관관계가 혼란스럽게 얽히지 않도록 한다.
생명주기 상의 모든 단계에 걸쳐 도메인 객체의 무결성을 유지하는데 아주 중요한 패턴이다.
팩토리 (Factory)
생명주기의 첫단계인 생성 단계에서 복잡한 객체와 Aggregate를 생성하는데 복잡하거나, 내부를 많이 노출하게 된다면 Factory를 통해 생성하고, 재구성함으로써 내부 구조를 캡슐화할 수 있다.
레포지토리 (Repository)
생명주기의 중간 ~ 마지막 단계를 다루며, 인프라스트럭처를 캡슐화하면서 영속 객체를 조회, 저장하는 수단을 제공한다.
Factory, Repository 패턴이 도메인에서 나온 것은 아니지만, 모델 객체에 더 쉽게 접근하는 수단을 제공하여 모델 주도 설계를 완성시키며 도메인 설계에서 중요한 역할을 한다.
해당 세 가지의 패턴을 활용하여 Aggregate를 모델링하고 설계에 factory와 Repository를 추가한다면 모델 객체의 생명주기 동안 체계적이고 의미 있는 단위로 다룰 수 있다.
'Domain Driven Design' 카테고리의 다른 글
2부. 소프트웨어에서 표현되는 모델 : 모듈 (Module) (0) 2021.04.05 2부. 소프트웨어에서 표현되는 모델 : 서비스(Service) (0) 2021.03.28 2부. 소프트웨어에서 표현되는 모델 : 엔티티, 값 객체 (Entity, Value Object) (0) 2021.03.16 2부. 소프트웨어에서 표현되는 모델 : 연관 관계(association) (0) 2021.03.15 2부 모델 주도 설계의 기본 요소 (0) 2021.03.07