【问题标题】:Android MVVM Livedata best practiceAndroid MVVM Livedata 最佳实践
【发布时间】:2019-04-26 17:30:15
【问题描述】:

我正在体验来自谷歌的新架构组件,即 LiveData 和 ViewModel。通过结合这两个 API,我们可以让视图模型以反应的方式监听和更新数据。

我的问题是如何更具体地在 ViewModel 中表示数据,将数据分解为单独的字段之间哪种方式更好,如下所示

class UserViewMode : ViewModel() {
    var name = MutableLiveData<String>
    vat lastName = MutableLiveData<String>
}

或者通过将数据封装在包含姓名和姓氏的数据持有者/模型类中,并让视图模型在 LiveData 观察者中观察此模型类,如下所示

class UserViewMode : ViewModel() {
    var user = MutableLiveData<User>
}

提前致谢。

【问题讨论】:

    标签: android architecture viewmodel android-livedata


    【解决方案1】:

    我认为这仅取决于您如何获取数据,您应该考虑字段是否单独更改?

    例如,如果你得到它:

    • User,就不用分字段了
    • 另一方面,如果您将 namelastName 分开更改,则应该有两个字段。

    按照有意义的方式去做。

    【讨论】:

    • 是的,这对我来说很有意义!因为如果您的数据模型封装了数据并且您的数据单独更改,那么您将不得不重置每个字段更改的数据模型的值
    【解决方案2】:

    第二种方法更好。

    class UserViewModel : ViewModel() {
        var user = MutableLiveData<User>
    }
    

    因为将数据封装在模型(用户)对象中比将所有数据分开要好。 我能看到的主要优点是 1. 干净的代码和架构。 2.模型对象可以在GSON(将数据解析成模型对象)、Room数据库等其他组件之间使用/传递。

    如果有多个 User 对象并且它们需要在 RecyclerView 中呈现,那么您必须将数据封装到一个对象中。否则代码会变成一堆列表的混乱。

    【讨论】:

    • 这和我想的差不多,但是采用这种方法,实时数据只观察用户对象的任何变化,而不是它的字段。我已经实现了这一点,但是对于我提交到用户对象的任何字段的每一次更改,我都必须像user.value = user.value 一样休息实时数据值,以强制视图重新绑定到新数据。还有其他方法可以让实时数据也收听User 字段吗?
    • 这可能会对您有所帮助。它使用数据绑定stackoverflow.com/questions/48020377/…
    • 我已经在使用第二个答案stackoverflow.com/a/52287357/2057782 但它会如何影响性能?
    • 我不认为有任何性能问题,因为它们只是使用 Observable 和 Observer 模式的回调。
    猜你喜欢
    • 2017-03-21
    • 2012-08-19
    • 2018-11-19
    • 1970-01-01
    • 1970-01-01
    • 2017-09-01
    • 2018-11-03
    • 2015-10-20
    • 1970-01-01
    相关资源
    最近更新 更多