-
Notifications
You must be signed in to change notification settings - Fork 1
Open
Labels
Description
🙋🏻♂️ 제안 사항
Facade 계층을 하나 추가하는 방법에 대해 고민
- 현재 간접 참조를 통해서 데이터를 호출하고 있는 형태에서는 Facade 를 추가 방안에 대해 고민해봅시다.
- 현재 Query, Command 를 묶고 있어서 readOnly 을 설정하는데 용이하고 하나의 트랜잭션을 묶는데 장점이 있습니다.
- 레이어 구조는 Controller -> Facade -> Service -> Repository 순으로 진행하고 같은 layer는 참조할 수 없도록 합시다.
패서드 패턴?
- 서브 시스템에 있는 인터페이스들에 대한 통합된 인터페이스를 제공한다.
- 즉, 클라이언트 요청을 적절한 서브시스템 클래스에 위임하여 각 서브 클래스들끼리 의존하지 않아 의존성 전이를 방지할 수 있따.
(의존성 전이 : 다른 객체에 변경이 있을 때, 변경이 전파되는 것. 그렇기 떄문에 의존성을 최소화해야 한다.)
패서드 패턴의 장점
- 서브시스템 간의 의존을 하지 않아 아래와 같은 장점이 있다.
- 테스트 시 모킹, 격리 환경을 만드는데 이점이 있어 외부 서비스가 변경되어도 코드 수정을 할 일이 줄어든다.
- e.g. 외부 서비스 (3rd party API) 에 관한 의존성 전이되지 않는 장점이 있다.
현재 Service 레이어간 참조를 하고 있는 위치
PostCommandService
@Service
@Transactional
@RequiredArgsConstructor
public class PostCommandService {
private final PostRepository postRepository;
private final BarQueryService barQueryService;
}PostQueryService
@Service
@RequiredArgsConstructor
@Transactional(readOnly = true)
public class PostQueryService {
private final PostRepository postRepository;
private final BarQueryRepository barQueryRepository;
private final CustomUserDetailsService userDetailsService;
private final LocationRangeService locationRangeService;
}📖 참고 사항
공유할 내용, 레퍼런스, 추가로 발생할 것으로 예상되는 이슈, 스크린샷 등을 넣어 주세요.
Reactions are currently unavailable