일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- Express
- REDIS
- Java Reflextion API
- 오라클
- vue.js
- quert
- 애그리거트
- 컴포넌트 주도
- 도커빌드
- rabbitmq 에러
- paraller
- 리덕스 공식문서
- 자료구조
- 리액트
- 트리 회전
- redux
- .getClass()
- 리덕스
- VUE
- 자바
- $emit()
- ACCESS_REFUSED
- AWS
- react
- exiting abnormally
- 네임드 뷰
- EBS
- 오라클 병렬처리
- forNmae()
- 커스텀 로그인
- Today
- Total
개발정리
애그리거트 본문
백 개 이상의 테이블을 한 장의 ERD에 표시하면 데이터 구조를 이해하는데 어려움
주요 도메인 요소 간의 관계를 파악하기 어렵다는 것은 코드를 변경하고 확장하는 것이 어려워 진다는 것
복잡한 도메인을 이해하고 쉬운 단위로 만들려면 상위 수준에서 모델을 조망할 수 있는 방법이 필요한데, 그방법이 애그리거트다.
애그리거트는 관련된 객체를 하나의 군으로 묶어준다.
수 많은 객체를 애그리거트로 묶어서 바라보면 상위 수준에서 도메인 모델 간의 관계를 파악 할 수 있다.
애그리거트는 모델을 이해하는데 도움을 줄 뿐만 아니라 일관성을 관리하는 기준도 된다.
-> 애그리거트는 복잡한 도메인을 단순한 구조로 만들어 준다.
경계를 설정할 때 기본이 되는 것은 도메인 규칙과 요구사항이다.
애그리거트 루트
애그리거트는 여러 객체로 구성되기 때문에 한 객체만 상태가 정상이면 된다.
애그리거트에 속한 모든 객체가 일관된 상태를 유지하려면 애그리거트 전체를 관리할 주체가 필요한데, 이 책임을 지는 것이 애그리거트의 루트 엔티티.
애그리거트 루트 엔티티는 애그리거트의 대표 엔티티이다.
애그리거트에 속한 객체는 애그리거트 루트 엔티티에 직접 또는 간접적으로 속하게 된다.
도메인 규칙과 일관성
애그리거트 루트의 핵심 역할은 애그리거트의 일관성이 깨지지 않도록 하는것
애그리거트 루트는 애그리거트가 제공해야할 도메인 기능 제공
EX)배송지 변경, 상품 변경
애그리거트 외부에서 애그리거트에 속한 객체를 직접 변경하면 안된다.
- public set 메서드를 피해야 함.
- 도메인의 의미나 의도를 표현하지 못하고
도메인 로직을 도메인 객체가 아닌 응용영역이나 표현 영역으로 분산
밸류는 불변값으로 표현한다.
트랜잭션 범위
트랜잭션 범위는 작을수록 좋다.
- 잠금대상이 많아지기 때문
한 트랜잭션에서는 한개의 애그리거트만 수정해야 한다.
만약 부득이하게 한 트랜잭션으로 두개 이상의 애그리거트를 수정해야 한다면 응용 서비스에서 두 애그리거트를 수정하도록 구현
리포지토리와 애그리거트
애그리거트는 개념상 완전한 한 개의 도메인 모델을 표현하므로 객체의 영속성을 처리하는 리포지터리는 애그리거트 단위로 존재
order와 orderLine 을 물리적으로 각가 별도의 DB테이블에 저장한다고 해서 ORDER와 ORDERLine을 위한 리포지터리를 각각 만들지 않는다.
-> order를 위한 리포지터리만 존재
애거리거트는 개념적으로 하나이므로 리포지토리는 애그리거트 전체를 저장소에 영속화 해야한다.
동일하게 애그리거트를 구하는 리포지토리 메서드는 완전한 애그리거트를 제공해야 한다.