문제 구조 질문 및 repository 내에서의 .subscribe가 작동하지 않는 문제
veldic opened this issue · 1 comments
View <-> ViewModel <-> Repository
의 구조를 가지고 있기 때문에 repository 내에서 RxJava를 통해 data를 불러온다고 이해를 했는데요.
그렇다면 Repository 내에서 subscribe를 통해 ViewModel에 LiveData<List>를 넘겨주면 되는 것인지, 그렇다면 Repository에서 ViewModel을 import해서 사용해야 하는 것인지 궁금합니다.
일단 위에 언급했던 구조를 적용해보고자 MovieRepository에서
service.fetchDiscoverMovie()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe{~~}
을 통해서 it을 사용하여 넘겨주려고 했는데 위와 같은 형태에서 it이 인식되지 않아 질문드립니다.
lecture 3에서 제시해주셨던 예시 코드에서는 위와 같은 형태의 코드에서 fetch~~()함수에서 Observable<List>를 return하고 subscribe 내에서 it이 List 가 되었기에 fetchDiscoverMovie()는 Single를 return하고 subscribe 내에서 it이 DiscoverResponse가 되길 기대했으나 it이 인식되지 않았습니다.
-
Repository 는 이 Repository 를 사용하는 ViewModel 에 디펜던시가 생기는 건 권장되지 않습니다. Repository 는 함수나 필드의 형태로 데이터를 보여주고 (이때 Reactive 하게 LiveData<List> 라던가 Single<List> 요런 식이어야 겠죠?) ViewModel 은 이 Repository 를 주입 받아 해당 함수나 필드의 변경을 view 가 반영할 수 있도록 구조를 짜면 좋을 것 같습니다
-
.subscribe{ it -> ... }
으로 파라미터 it 을 명시적으로 적어주세요. 아마subscribe
함수의 오버로딩 때문에 람다식의 인자 갯수가 정확히 맞지 않으면 모호한 함수가 되어서 it 과 같은 인자명을(이자 갯수를) 생략하지 말고 꼭 적어줘야 하는 것 같습니다.