Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Suggest] Facade 리팩토링 #70

Open
pbg0205 opened this issue Nov 20, 2022 · 1 comment
Open

[Suggest] Facade 리팩토링 #70

pbg0205 opened this issue Nov 20, 2022 · 1 comment
Assignees

Comments

@pbg0205
Copy link
Member

pbg0205 commented Nov 20, 2022

🙋🏻‍♂️ 제안 사항

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;

}

📖 참고 사항

공유할 내용, 레퍼런스, 추가로 발생할 것으로 예상되는 이슈, 스크린샷 등을 넣어 주세요.

@zbqmgldjfh
Copy link
Member

zbqmgldjfh commented Nov 21, 2022

우선 좋은 글 감사힙니다!

다음과 같이 원래는 Query, Command 서비스 부분들을 퍼사드로 변경되도록 구현하였습니다!

@Service
@RequiredArgsConstructor
public class PostServiceGateway implements CommandService<PostCreateRequest>, QueryService {

    private final PostCommandService postCommandService; // 퍼사드로
    private final PostQueryService postQueryService; // 퍼사드로

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants