Чистая архитектура и пейджинг 3.0 с комнатой

Я обновляю пейджинг до версии 3.0, и поскольку я использую чистую архитектуру (здесь важно разделение между ядром, где у меня есть мои репозитории, и моими useCases, и модулем приложения, где находятся все классы фреймворка Android ...), однако я использую два классы модели (один для запроса данных из комнаты, например:

 data class ExampleEntity(
    
        @Expose
        @ColumnInfo(name = INTERVENTION_ID_COLUMN_NAME)
        @SerializedName(INTERVENTION_ID_COLUMN_NAME)
        val interventionId: String?,
    
        @Expose
        @ColumnInfo(name = SITE_NAME_COLUMN_NAME)
        @SerializedName(SITE_NAME_COLUMN_NAME)
        val siteName: String?
    }

другой должен использоваться в основном модуле и useCase, не предполагая, что база данных комнаты вообще является зависимостью ... например:

data class Example(

        @Expose
        @SerializedName(INTERVENTION_ID_COLUMN_NAME)
        val interventionId: String?,

        @Expose
        @SerializedName(SITE_NAME_COLUMN_NAME)
        val siteName: String?
    }

позже в databseImplementation я сопоставляю класс Entity с основным классом, и это было возможно при подкачке 2, поскольку список страниц может быть сопоставлен, теперь я не могу получить доступ к объекту PagingData Entity и могу только добавлять к нему (заголовки, разделители .. .etc) как я могу решить эту дизайнерскую головоломку?


person joghm    schedule 28.10.2020    source источник


Ответы (1)


Как видно из следующей документации, можно преобразовать элементы в PagingData до того, как они достигнут вашей ViewModel.

В вашем репозитории должно быть что-то вроде этого

val flow = Pager(PagingConfig(pageSize = 20)) {
  ExamplePagingSource(backend, query)
}.flow

Идея состоит в том, чтобы отобразить содержимое flow вот так

flow.mapLatest { pagingData ->
        pagingData.map { entity -> 
            // map to from ExampleEntity to Entity here
        }
    }
person Scott Cooper    schedule 02.11.2020