도메인 주도 설계 및 구현 (2)
모델 내의 모든 애그리게잇 인스턴스가 어떤 사건으로 인해 생성됐는지 알 수 있게 해주고,
시간의 흐름에 따라 해당 애그리게잇 인스턴스에 어떤 일이 일어 났는지를 오퍼레이션 별로 확인해 주는 방법을 개발하고자 한다. 이런 수준의 변경 추적은 이벤트 소싱이라는 패턴의 핵심이다.
![]()
애그리게잇 저장소.
데이터 페브릭과 그리드 기반 컴퓨팅
엔티티
- 비즈니스 관계자는 보통 근사한 데이터베이스 테이블 편집기를 개발하는데만 너무 많은 노력을 들인다.
올바른 도구를 선택하지 않았다면 공들여 다룬 CRUD 기반 솔루션의 비용이 커진다. CRUD가 타당한 선택일 때가 그루비 앤 그레일스(Groovy and Grails), 루비온 레인스 (Ruby on Rails)과 같은 언어 및 프레임워크가 비로소 합리적인 순간이다.
UUID는 상대적으로 생성이 빠른 식별자이고, 영속성 메커니즘과 같은 외부와의 상호 교류가 필요하지 않다. 1초 동안 특정 종류의 엔티티가 무수히 생성 되더라도 UUID 생성기는 그 속도를 유지할 수 있다.
유비쿼터스 언어 용어집
식별을 할 수 있도록 용어 선정을 신중히 한다.
* 역할과 책임
모델링의 한 측면은 객체의 역할과 책임을 발견하는 것이다.
역할과 책임의 분석은 도메인 객체 전반에 적용할 수 있다.
-> 객체지향 프로그래밍에서 일반적으로 인터페이스는 구현 클래스 의 역할을 결정한다.
위임은 복잡하게 만들지 않으며 단순하게 해줄 때에만 좋은 설계다.
객체 정신 분열증 (object schizophoenia)
아리송한 객체 이름의 뒤편에 숨어있는 실제 문제는 객체 식별자의 혼란이다.
(따라서 객체 명명을 잘 정해야 한다.)
DDD에서는 비즈니스 도메인의 모델이 가장 중요하다.