DataBinding ViewModel vs RxJava 2

问题描述 投票:1回答:1

所以基本上到目前为止,我一直在应用程序中广泛使用rxjava2,但是决定检查数据绑定,查看模型和实时数据。而且我不确定我是否拥有所有这一切,因为除了在设备旋转期间保存状态外,我看不到切换还有其他明显的好处,我什至可以说我看到在视图之间引入带有视图模型的数据绑定的弊端和rx Java供电的请求。

让我们看一些注册表格的例子。它包含:

  • 2个输入-姓名

  • 具有3个选择的字段

  • 具有进度的按钮

在反应世界中,我将有两个具有名称和姓氏的可观察对象,一个可合并3个选择单击并将它们映射到正确枚举的可观察对象,然后我可以将所有数据合并在一起,直接与负责single的人进行通信在之间发送数据将导致进度或错误以及tada Im已完成。

这是我使用数据绑定和视图模型想到的东西:

class LiveDataViewModel : ViewModel() {
    enum class Choice {
        NONE, FIRST, SECOND, THIRD
    }

    private val _progressVisibilityLiveData = MutableLiveData<Boolean>()
    private val _errorLiveData = MutableLiveData<GlobalError>()

    val progressVisibilityLiveData: LiveData<Boolean> = _progressVisibilityLiveData.apply { value = false }
    val errorLiveData: LiveData<GlobalError> = _errorLiveData

    val data = LiveDataData()
    val observableData = ObservableField(LiveDataData())

    fun actionContinue() {
        _progressVisibilityLiveData.postValue(true)
        if (observableData.get()?.isValid() == false) _errorLiveData.postValue(GlobalError.AllFieldsRequired)
        else sendToApi()
    }

    private fun sendToApi() {
        // TODO there would be still an rx java call to single, when we would handle error in the same way we are doing
        // it in actionContinue
    }

    data class LiveDataData(val firstName: ObservableField<String> = ObservableField(""),
                            val secondName: ObservableField<String> = ObservableField(""),
                            val choice: ObservableField<Choice> = ObservableField(Choice.NONE)) {
        fun changeChoice(newChoice: Choice) {
            choice.set(newChoice)
        }

        fun isValid(): Boolean = !firstName.get().isNullOrEmpty() && !secondName.get().isNullOrEmpty() && choice.get() != Choice.NONE

        fun toRequest(): Request = Request(firstName.get()!!, secondName.get()!!, choice.get()!!)
    }
}

因此,我将直接使用bindData从xml更改LiveDataData的字段,我也将根据此绑定更改选择框的状态,必须手动完成进度,然后使用数据绑定触发可见性。但这真的是处理此类案件的好方法吗?

[我看到的缺点是actionContinue中的整个逻辑将是手动更改值,ObservableProperties中的值可能为空,因此我们要么必须在必须使用nullable的任何地方处理!!值老实说,我不觉得这是正确的方向。

[也许你们中的任何人都曾考虑过类似的事情,如果我做出了错误的假设,或者如果我根本不使用例如ObservableProperty,最终可能会指出我。显然,有很多关于数据绑定和实时数据等的文章,但是我还没有找到满足我好奇心的文章。哦,不能从表单为每个属性创建MutableLiveData

android rx-java2 android-databinding android-livedata
1个回答
0
投票

RxJava是与DataBinding完全不同的概念。它比绑定数据更像是一种处理并发的方法。我100%认为值得学习。 Android社区已张开双臂拥抱它。

无耻的插件:我编译了一段时间的RxJava资源列表-http://gregloesch.com/dev/2014/10/20/resources-for-learning-rxjava-android.html

© www.soinside.com 2019 - 2024. All rights reserved.