마이페이지

// 각 도메인 서비스에 조회 로직
@Service
public class BadgeService {
    public List<Badge> getUserBadges(Long userId) {
        // 배지 조회 로직
    }
}

@Service
public class SubscriptionService {
    public List<Subscription> getUserSubscriptions(Long userId) {
        // 구독 조회 로직
    }
}

@Service
public class PostService {
    public List<Post> getUserPosts(Long userId) {
        // 게시글 조회 로직
    }
}

// 마이페이지 Facade 서비스
@Service
public class MyPageFacadeService {
    private final BadgeService badgeService;
    private final SubscriptionService subscriptionService;
    private final PostService postService;
    
    public MyPageInfo getMyPageInfo(Long userId) {
        // 여러 도메인 서비스 호출해서 조합
        List<Badge> badges = badgeService.getUserBadges(userId);
        List<Subscription> subscriptions = subscriptionService.getUserSubscriptions(userId);
        List<Post> posts = postService.getUserPosts(userId);
        
        return MyPageInfo.builder()
            .badges(badges)
            .subscriptions(subscriptions)
            .posts(posts)
            .build();
    }
}

관리자

@Service
public class AdminFacadeService {
    private final StoreService storeService;
    private final UserService userService;
    private final ReportService reportService;
    
    public AdminDashboard getDashboard() {
        // 여러 도메인 데이터 조합
    }
    
    public void approveStore(Long storeId, Long adminId) {
        // 권한 검증 후 Store 도메인 서비스 호출
        storeService.approveStore(storeId, adminId);
    }
}

왜 이 방식을 추천하는가?

  1. 단일 책임 원칙: 각 도메인 서비스는 자신의 영역만 담당
  2. 재사용성: 배지 조회 로직을 다른 곳에서도 활용 가능
  3. 테스트 용이성: 각 도메인 로직을 독립적으로 테스트
  4. 조합의 유연성: 마이페이지 요구사항 변경 시 Facade만 수정