반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 알고리즘
- 커링
- 모던 자바 인 액션
- 해시
- 스택/큐
- 가장 큰 수
- 전화번호 목록
- 코딩 테스트
- H-index
- 고차원 함수
- 기능개발
- 롬복 어노테이션
- @EnableScheduling
- kubenetes
- @Getter
- 완주하지 못한 선수
- 루씬 인 액션
- @Setter
- 크론 표현식
- 검색 기능 확장
- 영속 자료구조
- @configuration
- Java
- 다리를 지나는 트럭
- @Data
- 스프링 스케쥴러
- 프로그래머스
- K번째수
- 쿠버네티스
- 정렬
Archives
- Today
- Total
Today I Learned
[도메인 주도 설계] 06. 도메인 객체의 생명주기 (1) 본문
728x90
- 모든 객체에는 생명주기가 있다.
- MODEL-DRIVEN DESIGN에서는 이러한 객체들을 관리하는것이 중요하다.
- 도메인 객체의 관리와 관련된 문제는 두 가지 범주로 나뉜다.
- 생명주기 동안의 무결성 유지하기
- 생명주기 관리의 복잡성으로 모델이 난해해지는 것을 방지하기
- AGGREGATE, FACTORY, REPOSITORY 세 가지 패턴을 사용해서 문제를 해결한다.
AGGREGATE (집합체)
- 데이터 변경의 단위로 다루는 연관 객체의 묶음
- 경계 : AGGREATE에 무엇이 포함되고 포함되지 않는지를 정의
- 루트 : 하나만 존재하며, AGGREGATE에 포함된 특정 ENTITY를 가리킴
- 경계 안의 객체는 서로 참조할 수 있지만, 경계 바깥의 객체는 루트만 참조할 수 있다.
- AGGREGATE 적용 규칙
- 루트 ENTITY는 전역 식별성을 지니며 궁극적으로 불변식을 검사할 책임이 있다.
- 각 루트 ENTITY는 전역 식별성을 지닌다. 경계 안의 ENTITY는 지역 식별성을 지니며, 이러한 지역 식별성은 해당 AGGREGATE 안에서만 유일하다.
- AGGREGATE 의 경계 밖에서는 루트 ENTITY를 제외한 AGGREGATE 내부의 구성요소를 참조할 수 없다.
- AGGREGATE 안의 객체는 다른 AGGREGATE의 루트만 참조할 수 있다.
- 삭제 연산은 AGGREGATE의 객체 안에 모든 요소를 한 번에 제거해야 한다.
- AGGREGATE 경계 안의 어떤 객체를 변경하더라도 전체 AGGREGATE의 불변식은 모두 지켜져야 한다.
- 불변식 : 데이터가 변경될 때마다 유지돼야하는 일관성 규칙
FACTORY (팩터리)
- 객체를 생성하는 책임을 맡고있는 프로그램 요소
- 복합한 객체나 AGGREGATE를 생성하는데 필요한 지식을 캡슐화
- 클라이언트의 목적과 생성된 객체의 추상적인 관점을 반영하는 인터페이스를 제공
- FACTORY 설계를 위한 기본 요건
- 각 생성 방법은 원자적이어야 하며, 생성된 객체나 AGGREGATE의 불변식을 모두 지켜야한다.
- 생성된 클래스보다는 생성하고자하는 타입으로 추상화되어야 한다.
- 다형성을 활용하지 않는 간단한 객체까지 FACTORY를 사용하면 이해하기 어려워질 수 있다.
- 공개 생성자만으로 충분한 경우
- 클래스가 타입인 경우, 클래스가 어떤 계층구조의 일부를 구성하지 않으며, 인터페이스를 구현하는 식으로 다형적으로 사용되지 않는 경우
- 클라이언트가 STRATEGY를 선택하는 한 방법으로서 구현체에 관심이 있는 경우
- 클라이언트가 객체의 속성을 모두 이용할 수 있어서 클라이언트에게 노출된 생성자 내에서 객체 생성이 중첩되지 않는 경우
- 생성자가 복잡하지 않은 경우
- 공개 생성자가 FACTORY와 동일한 규칙을 반드시 준수해야하는 경우(모든 불변식을 충족하는 원자적인 연산)
- 인터페이스 설계시 주의사항
- 각 연산은 원자적이어야 한다. 생성물을 만들어내는 데 필요한 것들을 모두 한번에 FACTORY로 전달해야 한다.
- FACTORY는 자신에게 전달된 인자와 결합될 것이다. 인자를 어떻게 처리하느냐에 따라 결합의 정도가 달라진다.
- ENTITY FACTORY와 VALUE OBJECT FACTORY
- ENTITY FACTORY는 유효한 AGGREGATE를 만들어내는 데 필요한 필수 속성만 받아들이는 경향이 있다. 불변식에서 세부사항을 필요로 하지 않는다면 생성 된 후에 추가해도 된다.
- ENTITY는 식별성이 필요하며, 프로그램에서 식별자를 할당하는 경우라면 FACTORY가 관리하기 적절하다.
- VALUE OBEJCT는 불변적이므로 생성물이 완전히 최종적인 형태로 만들어진다.
- 저장된 객체의 재구성
- 생성, 재구성 FACOTRY 간의 차이점
- 재구성된 ENTITY FACTORY는 새로운 ID를 할당하지 않는다. 이전 객체와의 연속성을 잃어버리게 된다.
- 객체를 재구성하는 FACTORY는 불변식 위반을 다른 방식으로 처리한다. 불일치 문제를 해결하기 위한 전략이 필요하다.
- 생성, 재구성 FACOTRY 간의 차이점
728x90
'도메인 주도 설계' 카테고리의 다른 글
[도메인 주도 설계] 07. 언어의 사용(확장 예제) (1) (0) | 2022.01.06 |
---|---|
[도메인 주도 설계] 06. 도메인 객체의 생명주기 (2) (0) | 2021.12.17 |
[도메인 주도 설계] 05. 소프트웨어에서 표현되는 모델 (2) (0) | 2021.11.26 |
[도메인 주도 설계] 05. 소프트웨어에서 표현되는 모델 (1) (0) | 2021.11.19 |
[도메인 주도 설계] 04. 도메인의 격리 (0) | 2021.11.12 |
Comments