seminar-2020 icon indicating copy to clipboard operation
seminar-2020 copied to clipboard

문제 구조 질문 및 repository 내에서의 .subscribe가 작동하지 않는 문제

Open veldic opened this issue 3 years ago • 1 comments

View <-> ViewModel <-> Repository 의 구조를 가지고 있기 때문에 repository 내에서 RxJava를 통해 data를 불러온다고 이해를 했는데요. 그렇다면 Repository 내에서 subscribe를 통해 ViewModel에 LiveData<List<Movies>>를 넘겨주면 되는 것인지, 그렇다면 Repository에서 ViewModel을 import해서 사용해야 하는 것인지 궁금합니다.

일단 위에 언급했던 구조를 적용해보고자 MovieRepository에서 service.fetchDiscoverMovie() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe{~~} 을 통해서 it을 사용하여 넘겨주려고 했는데 위와 같은 형태에서 it이 인식되지 않아 질문드립니다. lecture 3에서 제시해주셨던 예시 코드에서는 위와 같은 형태의 코드에서 fetch~~()함수에서 Observable<List<PostDto>>를 return하고 subscribe 내에서 it이 List<PostDto> 가 되었기에 fetchDiscoverMovie()는 Single<DiscoverResponse>를 return하고 subscribe 내에서 it이 DiscoverResponse가 되길 기대했으나 it이 인식되지 않았습니다.

veldic avatar Oct 20 '20 10:10 veldic

  1. Repository 는 이 Repository 를 사용하는 ViewModel 에 디펜던시가 생기는 건 권장되지 않습니다. Repository 는 함수나 필드의 형태로 데이터를 보여주고 (이때 Reactive 하게 LiveData<List<Movie>> 라던가 Single<List<Movie>> 요런 식이어야 겠죠?) ViewModel 은 이 Repository 를 주입 받아 해당 함수나 필드의 변경을 view 가 반영할 수 있도록 구조를 짜면 좋을 것 같습니다

  2. .subscribe{ it -> ... } 으로 파라미터 it 을 명시적으로 적어주세요. 아마 subscribe 함수의 오버로딩 때문에 람다식의 인자 갯수가 정확히 맞지 않으면 모호한 함수가 되어서 it 과 같은 인자명을(이자 갯수를) 생략하지 말고 꼭 적어줘야 하는 것 같습니다.

sanggggg avatar Oct 21 '20 13:10 sanggggg