【问题标题】:is that necessary to implement Command in mvvm pattern for android是否有必要在 mvvm 模式中为 android 实现命令
【发布时间】:2017-04-27 08:30:57
【问题描述】:

我正在尝试使用 MVVM 模式构建 Android 应用。
我已阅读 Developer's Guide to Microsoft Prism Library 5.0 for WPF 以了解 MVVM。它提到 ViewModel 实现了属性和命令,因此它们可以通过数据绑定、命令相互交互。几乎所有关于 MVVM 的博客都提到了 Command,但没有一个实现了 Command。
有两种

<Button
    ...
    app:onClick="@{mvvm.onClick}"/>

public class ViewModel {
    public void onClick(View view){
    }
}

另一个

<Button
    ...
    app:onClick="@{view.onClick}"/>

public class MyActivity extends Activity {
    public void onClick(View view){
        viewModel.onClick();
    }
}

public class ViewModel {
    public void onClick(){
    }
}

哪一个是对的?如果两者都错了,如何在android的MVVM模式中实现Command?

【问题讨论】:

    标签: android mvvm command


    【解决方案1】:

    我已经使用 MVVM 实现了几个 android 项目。大多数在线资源都建议使用您的第一种方法,所以我从它开始,即 layout.xml 将包含对 viewModel 的引用。但很快我就遇到了这样的实施挑战。

    在 MVVM 中,view 持有对 viewModel 的引用,但 viewModel 不持有任何对 view 的引用,因此它是松耦合的,可以很容易地进行测试。假设我的 onclick 按钮需要插入一行并执行一些动画。这里的问题是 viewModel 没有对布局资源的任何引用,因此它不能执行任何与布局相关的功能。

    为了解决这种尴尬的情况,我改用第二种方法,即 layout.xml 持有对视图的引用,而视图持有对 viewModel 的引用。在 view.onClick 事件中,我会先做任何布局相关的编码,然后调用我的 viewModel.onClick 执行一些核心逻辑,或者根据需要连接到模型。

    layout.xml --> 视图 --> viewModel --> 模型

    在我看来,这个问题没有对错之分。这取决于您的情况和个人喜好。

    【讨论】:

      猜你喜欢
      • 2017-12-06
      • 1970-01-01
      • 2011-01-13
      • 2022-11-05
      • 2013-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多