Сохранение объектов Kotlin в базу данных помещений с помощью шаблона проектирования MVVM с использованием Kodein - PullRequest
0 голосов
/ 11 марта 2019

У меня есть приложение, которое я создаю и которое использует Room for DB и архитектуру MVVM.Я добавил объект Kotlin, который имеет функцию, которая сохраняет данные в базе данных Room.

Поскольку нет фрагмента или действия, нет представления, поэтому мне интересно, имеет ли смысл использовать процесс, который я использую,?Он работает, но только потому, что он работает, не означает его правильность.

Поскольку объекты Kotlin не имеют конструкторов, я добавил функцию, которая устанавливает ViewModel объекта, которая, в свою очередь, дает мне доступ к хранилищу и, таким образом,получение доступа к сохранению в базе данных.

Когда мое разобщение в понимании заключается в том, что я вызываю эту функцию в файле приложения (это тот же файл, который устанавливает Kodein), поэтому я не могу вызватьViewModelProviders.of функции, поскольку я не внутри фрагмента / деятельности.Вместо этого я вызываю функцию ViewModelFactory.create.Я не могу помочь, но чувствую, что это не возвращает тот же ViewModel, который вызывает остальная часть приложения?

Гуру Android Я прошу вашего совета ...

Пожалуйста, сообщите, если яна правильном пути или полностью к обеду?

Кроме того, кто-то может объяснить разницу в кодеине между связыванием и связыванием с?

Приложение (вызывается из манифеста Android)

class SampleIdeaApplication: Application(), KodeinAware {
    override fun onCreate() {
        val sampleIdeaViewModelFactory:SampleIdeaViewModelFactory by instance()

        val sampleIdeaViewModel: SampleIdeaViewModel = sampleIdeaViewModelFactory.create(SampleIdeaViewModel::class.java)
        SampleIdea.setSampleIdeaViewModel(sampleIdeaViewModel)
    }
 }

SimpleIdeaViewModelFactory

class SampleIdeaViewModelFactory(private val sampleIdeaRepository: SampleIdeaRepository) : ViewModelProvider.NewInstanceFactory() {

    @Suppress("UNCHECKED_CAST")
    override fun <T : ViewModel?> create(modelClass: Class<T>): T {
        return SampleIdeaViewModel(sampleIdeaRepository) as T
    }

}

SampleIdea (Object)

object SampleIdea {
    private lateinit var sampleIdeaViewModel: SampleIdeaViewModel

    fun insertIntoSampleIdeaDatabase(sie:SampleIdeaEntity) {
        sampleIdeaViewModel.upsert(sie)
    }

    fun setSampleIdeaViewModel(sivm: SampleIdeaViewModel) {
        sampleIdeaViewModel = sivm
    }
}

Еще раз помните, что это очень упрощенная версия фактического кода (реальный код сохраняет намного больше информации, вставка в забаву является частной, и есть другие публичные забавы, которые вызывают это.

...