컨트롤러는 먼저 사용자 요청을 수신한다. 컨트롤러의 주된 책임은 사용자 요청을 비즈니스 규칙을 알고 있는 도메인 모델에 대한 일련의 커맨드(command)로 변환하는 것이다. 도메인 모델은 여러 다른 유형의 클래스로 구성된다. 이 유형은 애플리케이션이 따르는 아키텍처 패턴에 따라 다르지만, 다음과 같은 요소를 자주 볼 수 있다.
• 엔터티(entity): 비즈니스 개념을 모델링한다. 예를 들어 시스템에서 청구서의 의미를 모델링하는 Invoice 클래스를 생각해보자. 엔터티 클래스는 이 개념을 설명하는 속성과 이 속성을 일관되게 조작하는 메서드를 포함한다.
• 서비스(service): 하나 이상의 엔터티를 포함하는 복잡한 비즈니스 규칙을 캡슐화한다. 사용자가 장바구니에 넣은 모든 제품을 결제하기로 결정했을 때 최종 청구서를 생성하는 GenerateInvoice 서비스를 생각해보라.