farmeter / random

0 stars 0 forks source link

DDD2장 : 아키텍처 개요 #55

Open farmeter opened 1 year ago

farmeter commented 1 year ago

요약

  1. 아키텍처 설계 시 표현, 응용, 도메인, 인프라스트럭처 4개의 영역으로 구분한다.
  2. 계층 구조에서 DIP를 이용하여, 테스트와 기능 확장을 손쉽게 할 수 있다.
  3. 도메인 영역의 주요 구성요소로는 1장의 엔티티, 밸류 외에 애그리거트Aggregate, 리포지터리Reposisotry, 도메인서비스 가 있다.

1. 아키텍처 설계의 4개 영역

(2.1, 2.2장)

표현

응용

도메인

인프라스트럭처

계층 구조 아키텍처

ddd_n_004

2. DIP

(2.3장)

의존 역전 원칙. Dependency Inversion Principle

  //사용할 저수준 객체 생성 후
  RuleDiscounter ruleDiscounter = new DroolsRuleDiscounter(); // <= 저수준 구현을 바꿀 시에는 이곳만 수정

  // 고수준 모델에서 생성자 방식으로 주입
  CalculateDiscountService disService = new CalculateDiscountService(ruleDiscounter);

잘못된 예

ddd_n_008

잘된 예

dip와 아키텍처

아키텍처에 dip를 적용하게 되면 인프라 스트럭처 영역이 응용과 도메인 영역에 의존하는 구조가 된다. 도메인과 응용영역에 대한 영향 없이 구현 기술을 변경할 수 있다.

3. 도메인 영역의 주요 구성요소

(2.4장)

(1장에서 살펴본) 엔티티와 밸류타입 복습

여기서 추가로 3가지 요소를 이야기해보자.

애그리거트 Aggregate

엔티티와 밸류

(다음 장들을 위한 용어 정리!)

1장에서 설명했듯이 밸류는 불변으로 구현할 것을 권장. setter를 통해 데이터가 변경된다는 것은 객체 자체가 완전히 교체 된다는 것.

애그리거트 Aggregate

리포지터리 Repository

리퐅지터리는 애그리거트 단위로 도메인 객체를 저장하고 조회하는 기능을 정의. 엔티티/밸류가 요구사항에서 도출되는 도메인모델인 반면, 리포지터리는 구현을 위한 도메인 모델

ddd_n_016

리포지터리 인터페이스는 도메인 모델 영역에 속하며, 실제 구현 클래스는 인프라스트럭처 영역에 속한다. 응용 서비스와 리포지터리는 밀접한 연관이 있다.

기타

2.5 요청 처리 흐름

2.6 인프라스트럭처 개요

2.7 모듈 구성

이미지 참조