DDD START! (3)

이유진·2023년 11월 11일
post-thumbnail

도메인 용어

개발 시, 도메인에 사용되는 용어를 코드에 반영하려고 하자

ex)

public OrderState {
	STEP1, STEP2, STEP3
}

➡️ 이렇게 정의하면, 사용하는 곳에서 if (order.OrderState = STEP1) 라고 할텐데 이해가 쉽게 될까? 🙅🏻‍♀️

의미있고 알아보기 쉬운 용어를 사용하자

아키텍쳐

  • 이전에 설명한 그림

Presentation Layer

HTTP 요청을 Application Layer이 필요하는 형식으로 변환하고, Application Layer의 반환값을 HTTP 응답으로 변환해주는 역할

Application Layer

로직을 직접 수행한다기 보다는, 도메인 모델에 로직 수행을 위임한다

이게 진짜 중요하다.

보통 원래 코드를 보면, Controller - Service - Repository 이 세 계층만 사용하고 비즈니스 로직은 Controller에서 호출되는 Service에 다 밀어넣는 경우가 있다 (이전의 나도 그랬다)

➡️ Application Service의 메서드는 최소 5줄!(너무 길지 않아도 된다는 말) 비즈니스 로직은 Domain Service에서 수행해야 한다

Domain Layer

도메인의 핵심 로직 구현

ex) 주문 도메인

  • 배송지 변경, 결제 완료, 주문 총액 계산 등의 로직

Infrastructure Layer

RDBMS 연동 처리, Redis 등의 데이터 연동 처리, 메시징 큐에 메세지 전송/수신 기능 구현

  • 실제 구현을 다룬다
  • 나머지 Layer은 실제 구현체(DB가 orcacle인지 mysql인지...) 에 의존적이지 않다(몰라도 된다)

계층구조

  • 상위 계층은 하위 계층으로만 의존한다
    ➡️ Presentation Layer은 Appliation Layer에 의존한다, 하지만 Infrastructure Layer는 Domain Layer에 의존하지 않는다

  • 엄격한 계층구조라면 한 단계 하위 계층만 의존해야 하지만, 편리함을 위해 Application Layer가 바로 Infrastructure Layer를 의존할 수 있다

(의존이라는 건, 가져와서 쓰는 것)

profile
BackEnd Developer

0개의 댓글