使用Kodein通过MVVM设计模式将Kotlin对象保存到会议室数据库中

时间:2019-03-10 23:31:57

标签: android mvvm kotlin android-room kodein

我有一个正在创建的应用程序,该应用程序使用Room for DB和MVVM体系结构。我添加了一个Kotlin对象,该对象的功能可以保存到Room数据库中。

因为没有片段或活动,所以没有视图,所以我想知道我使用的过程是否最有意义?它有效,但是仅仅因为它有效并不意味着它正确。

看到Kotlin对象没有构造函数,我添加了一个设置对象的ViewModel的函数,该函数又使我可以访问存储库,从而可以访问保存到数据库中。

我无法理解的地方是,我在应用程序文件(与设置Kodein的文件相同)中调用此函数,所以我无法调用ViewModelProviders.of函数,因为我不在片段中/活动。相反,我调用了ViewModelFactory.create函数。我忍不住觉得它不会返回其余应用程序调用的相同ViewModel?

Android Gurus,我征求您的意见...

请告知我是否走上正轨或完全外出午餐?

还有,有人可以解释一下结合与结合之间的Kodein区别吗?

应用程序(由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 SampleIdea {
    private lateinit var sampleIdeaViewModel: SampleIdeaViewModel

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

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

再次记住,这是实际代码的非常简化的版本(实际代码保存了很多信息,插入乐趣是私有的,还有其他一些公开乐趣可以调用。

0 个答案:

没有答案