[DDDStart] 6장. 응용 서비스와 표현 영역

6장. 응용 서비스와 표현 영역

USER -> 표현 영역 -> 응용 영역 -> 도메인 영역

 

응용 서비스 : 실제 사용자가 원하는 기능을 제공

응용 영역은 사용자가 웹브라우저를 사용하는지 REST API를 호출하는지 TCP 소켓을 사용하는지를 알 필요가 없다. 단지 기능 실행에 필요한 입력값을 받아 결과만 리턴하면 된다

 

표현 영역 : 사용자의 요청을 해석함

   

응용 서비스

응용 서비스 역할

 

응용 서비스 구현

하나의 서비스 클래스 vs 여러개의 서비스 클래스

   

표현 영역

 

값 검증

Spring Validation 는 Java 와 Spring 의 Validation - Junghoon Song 보면 금방 쓸 수 있음

 

권한 검사

시큐리티 공부하자 ~

 

조회 전용 기능과 응용 서비스

조회전용 기능은 단순하다. 트랜잭션 필요 없다

따라서 서비스 계층을 생략해도 무방

컨트롤러 -> DAO/리포지터리

@RequiredArgsConstructor
public class OrderController {
  private final OrderViewDao orverViewDao;

  @GetMapping("/myorders")
  public String list(ModelMap model) {
    String ordererId = SecurityContext.getAuthentication().getId();
    List<OrderView> orders = orderViewDao.selectByOrderer(ordererId);
    model.addAttribute("orders", orders);
    return "order/list";
  }
}

자세한건 11장 CQRS에서..

   

Q1. 표현 계층에서 파라미터로 RequestDto 받는 클래스들 어느 패키지에 둬야할까

서비스아닐까. 범균님 예제에서도 Service 패키지 안에 있음

 

A클래스의 메서드 a, B클래스의 메서드b는 모두 @Transactional 걸려있다고 하자. a와 b를 순차적으로 호출해야 하는 로직이 있다. a가 완벽하게 수행되고 b에서 런타임에러 뜨면 a는 롤백이 안될 것 같은데?

집가서 직접 해보자