2019-11-16 토요일

DDD

DTO Assembler

저번에 어플리케이션에서는 4가지의 데이터 타입으로 구분해야 될 것 같다는 생각을 했다. 이 생각을 구현하고자 하니까 고민해볼 것이 생겼다.

  • 최대한 의존성을 약하게 하고 싶다.
  • Domain Layer는 Application Layer보다 Low Level에 존재하므로, Application Layer에 의존하면 안 된다.
  • 그런데 Application Layer에서는 Domain Layer로부터 데이터를 받아서 Presentation Layer에 전달해야 한다.
  • 가장 쉽게 생각할 수 있는 방법은 Aggregate이 Application Layer에서 사용할 데이터를 응답해주는 것이다.
  • 그런데 이렇게 하면, Domain Layer가 Application Layer에 의존하게 되므로 안 된다.
  • 따라서 Application Layer에 Aggregate을 Presentation Layer로 전달하기 위한 DTO를 정의한다.

처음엔 단순히 DTO만을 정의한다. 나중에 어플리케이션이 많이 복잡해지면, DTO Assembler를 만들어서 Aggregate을 해석한 뒤 이를 DTO로 생성해주는 책임을 가진 객체를 생성하면 될 것 같다.