마이페이지
// 각 도메인 서비스에 조회 로직
@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);
}
}
왜 이 방식을 추천하는가?
- 단일 책임 원칙: 각 도메인 서비스는 자신의 영역만 담당
- 재사용성: 배지 조회 로직을 다른 곳에서도 활용 가능
- 테스트 용이성: 각 도메인 로직을 독립적으로 테스트
- 조합의 유연성: 마이페이지 요구사항 변경 시 Facade만 수정