반응형
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 |
Tags
- 알고리즘
- @configuration
- 스프링 스케쥴러
- 크론 표현식
- 고차원 함수
- 코딩 테스트
- H-index
- 영속 자료구조
- 전화번호 목록
- 쿠버네티스
- @Setter
- 정렬
- 기능개발
- @Data
- 스택/큐
- 모던 자바 인 액션
- 완주하지 못한 선수
- 다리를 지나는 트럭
- @Getter
- @EnableScheduling
- 커링
- 루씬 인 액션
- kubenetes
- 프로그래머스
- Java
- 검색 기능 확장
- 롬복 어노테이션
- 가장 큰 수
- 해시
- K번째수
Archives
- Today
- Total
Today I Learned
[도메인 주도 설계] 06. 도메인 객체의 생명주기 (2) 본문
728x90
REPOSITORY (리파지터리)
- 객체를 이용하기 위해서는 객체에 대한 참조가 필요하다.
- 객체의 참조를 얻는 방법은
- 객체를 생성
- 이미 알고있는 객체로부터 연관관계를 탐색
- 데이터베이스에서 질의를 통해 획득
- 이 중 3번의 방식은 질의 결과를 손쉽게 객체로 변환할 수 있어 도움이 되지만 남용할 경우 문제가 있다.
- 도메인이 아닌 기술적 메커니즘에 관해 더 생각하게 된다.
- AGGREGATE나 캡슐화 같은 특징을 활용하는 것을 우회하려 하고, 데이터를 직접 획득해서 조작하게 된다.
- 도메인 로직이 질의와 클라이언트 코드로 들어가고, ENTITY와 VALUE OBJECT는 데이터 컨테이너로 전락한다.
- 도메인 계층에 대한 개발자들의 이해 수준을 낮춰 모델과 도메인 계층을 동떨어진 것으로 만든다.
- REPOSITORY를 사용하면 위의 문제를 해결할 수 있다.
- REPOSITORY의 이점
- 영속화된 객체를 획득하고 해당 객체의 생명주기를 관리하기 위한 단순한 모델을 클라이언트에게 제공한다.
- 영속화 기술과 다수의 데이터베이스 전략 및 다수의 데이터 소스로부터 애플리케이션과 도메인 설계를 분리해준다.
- 객체 접근에 관한 설계 결정을 전해준다.
- 테스트에서 사용할 가짜 구현을 손쉽게 대체할 수 있다.(메모리 상의 컬렉션을 이용)
- REPOSITORY에 질의하기
- 구체적인 매개변수를 직접 입력하는 질의
- 가장 만들기 쉬움
- 특정 유형의 요약 연산을 반환한다는 개념과도 잘 맞아떨어짐
- SECIFICATION(명세)에 기반을 둔 질의
- 클라이언트가 질의의 획득 방법에 신경쓰지 않고 원하는 바를 획득할 수 있음
- 사용 가능한 인프라스트럭처에 따라 적용하기 어려울 수도 있음
- 클라이언트 코드가 REPOSITORY 구현을 무시한다 (개발자는 그렇지 않지만)
- REPOSITORY가 의도하지 않은 방식으로 사용된다면 수행 성능이 극단에 치우칠 수 있다.
- 상세한 구현까지는 아니더라도 캡슐화된 행위를 활용하는 것에 내포된 의미를 알아야 한다.
- REPOSITORY 구현
- 타입을 추상화한다.
- 타입은 인터페이스가 될 수도 있고 구체적인 구상 클래스가 될 수도 있다.
- 클라이언트와의 분리를 활용한다.
- REPOSITORY의 구현을 자유롭게 변경할 수 있게 된다.
- 영속화 전략을 자유롭게 교체할 수 있게 된다.
- 트랜잭션 제어를 클라이언트에 둔다.
- 트랜잭션 관리가 좀 더 단순해진다.
- 타입을 추상화한다.
- FACTORY와의 관계
- FACTORY가 새로운 객체를 만들어 내는 데 반해 REPOSITORY는 기존 객체를 찾아낸다.
- FACTORY는 객체를 인스턴스화하고, 클라이언트는 객체를 REPOSITOY에 추가한다. REPOSITORY는 데이터베이스 내의 객체 저장소를 캡슐화한다.
- FACTORY가 새로운 객체를 만들어 내는 데 반해 REPOSITORY는 기존 객체를 찾아낸다.
- 관계형 데이터베이스를 위한 객체 설계
- 관계형 데이터베이스는 비객체 구성요소이다. 그러나 데이터베이스는 다른 구성요소에 비해 객체 모델에 직접적으로 관련되어 있다. 이러한 불일치는 객체 모델에 영향을 줄 수 있다.
- 매핑 도구가 충분히 정교하기 때문에 관계형 테이블 설계에서 도메인 모델을 반영할 필요는 없다.
하지만 MODEL-DRIVEN DESIGN에 제기된 주장들(분석 모델과 설계 모들의 분리를 피하자)을 받아들이자면- 어느정도 객체 모델의 풍부함을 희생해야 하고
- 데이터베이스 설계도 변경(선태적 비정규화 같은)해야 한다.
- 그렇지 않으면 모델과 구현 간의 밀접한 결합을 잃어버릴 수 있다.
- 매핑은 투명해야 하고, 매핑도구에 작성된 코드를 통해 쉽게 이해할 수 있어야 한다.
- 데이터 모델과 객체 모델이 서로 갈라지게 해서는 안된다.
- 일부 객체 관계의 풍부함을 희생해서 관계 모델에 밀접하게 한다.
- 정규화같은 정형화된 관계 표준을 절충해서 객체 매핑을 단순하게 한다.
- 객체 시스템 외부의 프로세스는 이러한 객체 저장소에 접근해서는 안된다.
- 데이터 모델과 객체 모델이 서로 갈라지게 해서는 안된다.
- 구체적인 매개변수를 직접 입력하는 질의
728x90
'도메인 주도 설계' 카테고리의 다른 글
[도메인 주도 설계] 07. 언어의 사용(확장 예제) (2) (0) | 2022.01.06 |
---|---|
[도메인 주도 설계] 07. 언어의 사용(확장 예제) (1) (0) | 2022.01.06 |
[도메인 주도 설계] 06. 도메인 객체의 생명주기 (1) (0) | 2021.12.10 |
[도메인 주도 설계] 05. 소프트웨어에서 표현되는 모델 (2) (0) | 2021.11.26 |
[도메인 주도 설계] 05. 소프트웨어에서 표현되는 모델 (1) (0) | 2021.11.19 |
Comments