마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

paging3을cleanArchitecture적용시키는법

0 추천

안녕하세요 제가 이번 프로젝트때 paging3과 clean Architecture 적용을 하려는데 data layer에 PagingDataSource를 만들어서 쓸려고 합니다.

하지만 제 미숙한 경험으로 어떻게 해야지 맞는 방식인지 모르겠습니다.

관련 예제나 경험이 있으신분 도와주세요!

막힌 부분

data layer (repositoryImpl)

override fun getAlgorithmPagingSource(
    token: String,
    status: String
): Flow<PagingData<Post>> {
    return Pager(config = PagingConfig(pageSize = 20),
        pagingSourceFactory = { AlgorithmPagingSource(api, token, status) }
    ).flow
}

domain layer (repository) mapper 를 어떻게 사용해야하나요

fun getAlgorithmPagingSource(
    token: String,
    status: String,

    ):Flow<PagingData<PostEntity>>
hifl (670 포인트) 님이 2022년 1월 11일 질문

1개의 답변

0 추천
먼저 Clean Architecture라는게 해석하는 사람에 따라서 구현방법은 많이 달라질 수 있습니다. Uncle Bob이 이야기한 Clean Architecture는 전체 시스템 설계에 관한 것이므로 그걸  그대로 모바일 개발에 적용하는 건 잘 될 수도 있지만, 그 반대일 수도 있습니다.  회사조직, 팀의 구성, 그리고 어떤 앱을 만드느냐에 따라 달려 있습니다.

Paging Library를 사용하는 경우, Flow<PagingData>만을 리턴하기 때문에 일반적으로 사용하는 Data - Domain - Presentation의 3개의 레이어를 사용하려면 잘 적용이 되지 않습니다. 아마 여러가지 접근 방식이 있을 수 있는데, 저 같은 경우는 (이게 최선인지 아닌지는 모르겠으나), Data 레이어에서는 그냥 suspend function만 리턴을 하고 Domain 레이어 에서는 Flow<PagingData>를 리턴합니다. 처음에는 PagingData를 내가 정의한 타입으로 wrappiing해서 사용하려고 했지만, Paging Library 같은 경우는 이게 좀 쉽지 않더라구요.

그리고 ViewModel에서는 PagingData의 데이터를 map, filter, insertHeader 등을 화면에 보여줄 형태로 가공을 하고 collectLast를 합니다. collectLast  안에서 Fragment로 LiveData.postValue를 이용해 데이터를 전달합니다.

전체적인 코드는 구글이 개발자 문서에서 제공하는 걸 기반으로 사용하고 있어요.
spark (224,220 포인트) 님이 2022년 1월 11일 답변
...