[Android] 하나의 뷰모델에서 많은 레포지토리를 사용하는 것이 나쁠까요??

Falco·2022년 12월 31일
1

Android

목록 보기
35/55

안드로이드 개발을 진행하면서 한 화면에 사용되는 뷰모델에서 여러 레포지토리의 기능이 필요하게되어 다음과 같이 사용하게 되었다.

@HiltViewModel
class ReviewViewModel @Inject constructor(
    private val imageRepository: ImageRepository,
    private val userInfoRepository: UserInfoRepository,
    private val reviewRepository: ReviewRepository,
    private val cocktailRepository: CocktailRepository
) : ViewModel() {
	// ...
}

리뷰를 작성하기 위한 페이지의 뷰모델로써 리뷰에 사용될 커스텀 갤러리의 이미지 페이징을 담당하는 ImageRepository 리뷰에 같이 저장할 유저정보를 가져오는 UserInfoRepository, 리뷰를 읽거나 쓰는 것을 담당하는 ReviewRepository, 리뷰에 사용할 칵테일 정보를 가져오는 CocktailRepository 어쩌다보니 총 4개의 레포지토리를 사용하고 있었다.

물론 몇몇의 레포지토리의 기능을 통합하여 개수를 줄일 수 있겠지만, 데이터 레이어의 레포지토리를 쉽게 합쳐도 되는건가?에 대한 의문이 들었고 이에 관해 찾아보았다.

하나의 뷰모델에서 다수의 레포지토리사용은 Bad Practice인가요?

Is ViewModel with more than one repository bad?

Using Multiple Repsitory In ViewModel Is Bad Practice?

잘하고 있다.

이는 오히려 좋은 관해이다. 만약 레포지토리에 대해 사용하지 않는 함수나 데이터가 포함되어 있어도 이는 좋은 방법이다. 구글 선플라워 예제 앱을 보아라 여기도 동일하게 여러 레포지토리를 사용하고 있다.

뷰모델의 목적은 데이터가 저장된 위치를 추상화 하는 것이며, 뷰에서는 적합한 방식으로 데이터를 처리하여서 표현한다. 뷰모델은 여러 레포지토리에서 제공하는 복잡한 데이터를 추상화하여 보관해야 하며 이러기 위해서 여러 레포지토리를 사용하는 것은 오히려 추천하는 방식이다.

이는 관심사분리를 잘 적용한 예이다. 위의 예처럼 칵테일 정보를 위한 레포지토리, 유저 정보를 위한 데이터 레포지토리, 갤러리 이미지를 가져오는 레포지토리 등의 데이터 레이어단의 데이터 소스는 분리되어야 하며, 뷰모델에서는 이러한 복잡한 데이터를 처리해주기만 하면된다. 뷰는 데이터가 어디서 왔는지가 아니라 뷰모델이 제공하는 처리된 정보만 필요하기 때문이다.

profile
강단있는 개발자가 되기위하여

0개의 댓글