본문 바로가기

Design

Layered Architecture in DDD

Layered Architecture의 목적

관심사의 분리. 각 계층간의 관심사를 분리하기 위함이다.

기술과 로직이 분리가 안돼있다면 유지관리가 힘들다.

핵심원칙

  • 같은 계층, 아래 계층 요소에만 의존한다. (상위계층에 의존하지 않는다)

Layer 종류

  • User Interface Layer
  • Application Layer
  • Domain Layer
  • Infrastructure Layer

 

출처 : https://ajlopez.wordpress.com/2008/09/12/layered-architecture-in-domain-driven-design/

 

User Interface Layer(사용자 인터페이스 계층 or 표현 계층)

사용자에게 정보를 보여주고, 사용자의 명령을 해석한다.

유일하게 사용자가 접근 가능한 계층이다.

 

Application Layer(응용 계층)

소프트웨어가 수행할 작업을 정의하고, 도메인이 문제를 해결하게 한다.

업무규칙, 지식은 포함되지 않는다. 도메인에 작업을 위임한다.

업무상황을 반영하는 상태는 없지만, 사용자나 진행상황을 반영하는 상태는 가질 수 있다.

 

Domain Layer(도메인 계층 or 모델 계층)

업무개념, 업무상황 정보, 규칙을 표현하는 일을 책임진다.

업무상황을 반영하는 상태를 제어 또는 사용한다.

상태저장은 Infrastructure에 위임한다.

 

Infrastructure Layer

상위계층을 지원하는 기술적 기능을 제공한다.

어플리케이션에 대한 메시지 전송, 도메인 영속화, ui에 위젯을 그리는 등 작업을 한다.

 

Spring에서 사용하는 Layer와 비교

Spring framework에서 흔히 사용하는 layer와 비교하면 아래와 같다.

  • Controller == User Interface
  • Service == Application
  • Domain == Domain
  • Repository(DAO) == Infrastructure

Controller Layer는 사용자가 유일하게 접근 가능한 layer이다. 사용자의 명령을 해석해서 Service layer에 전달한다.

Service Layer는 소프트웨어가 수행할 작업을 정의하고 도메인이 문제를 해결하도록 돕는다. 도메인의 작업이 완료되면

Domain Layer는 도메인 로직, 업무 로직을 담당한다.

Repository Layer는 데이터베이스에 접근하고 상태를 저장, 불러오는 역할을 한다.

 

 

참조

 

Layered architecture in Domain-Driven Design

This time, let explore the concepts of a layered architecture, as proposed by Eric Evans in its classic book Domain-Driven Design, Tackling Complexity in the Heart of Software. In the chapter four …

ajlopez.wordpress.com

 

LAYERED ARCHITECTURE(계층형 아키텍처) | 위키북스

도시 목록에서 화물의 목적지를 선택하는 것과 같이 간단한 사용자 행위를 지원하는 해운 애플리케이션에도 (1) 위젯을 화면에 그리고 (2) 선택 가능한 모든 도시 목록을 데이터베이스에서 조회

wikibook.co.kr

 

'Design' 카테고리의 다른 글

객체지향 5대 원칙 SOLID  (0) 2021.05.15
Entity, VO, DTO  (0) 2021.02.01