В шаблоне MVVM, где данные для отображения должны быть подготовлены? - PullRequest
0 голосов
/ 08 апреля 2020

В настоящее время я использую MVVP и пытаюсь создать простое приложение с этим шаблоном. В этом приложении я использую API для извлечения некоторых данных, и в этих данных есть поле с датой в виде строки: 01.01.1999. Теперь я хотел бы отобразить эту дату в другом формате, скажем, 1 jan 1999. Поэтому мой вопрос: хочу ли я остаться верным MVVM и иметь хороший, чистый код, в котором должно происходить это преобразование? В моей ViewModel или в поставщике данных, перед передачей ответа ViewModel?

Так что моя идея сделать это во ViewModel будет выглядеть примерно так:

class MyViewModel(private val dataProvider: DataProvider) : ViewModel() {

    var data: MutableLiveData<DisplayData> = MutableLiveData()

    fun getData() {
        dataProvider.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(
                    onNext = { data -> prepareDataForDisplay(data) })
    }

    fun prepareDataForDisplay(data: Data) {
        data.postValue(DisplayData(data.date.parseToCorrectFormat()))
    }

    data class DisplayData(val date: String)

}

Или в моем поставщике данных:

class DataProvider(private val dataApi: DataApi) {

    override fun getData(): Observable<DisplayData> {
        return dataApi.getData().map { DisplayData(it.date.parseToCorrectFormat()) }
    }

    data class DisplayData(val date: String)
}

interface DataApi {
    @GET("data")
    fun getData(): Observable<Data>
}

Какой подход лучше?

1 Ответ

0 голосов
/ 13 апреля 2020

Вы должны измениться в DataProvider. Вы также можете сослаться на эту статью .

...