在Android的mvvm模式中实现Command是否必要

is that necessary to implement Command in mvvm pattern for android

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

1
2
3
4
5
6
7
8
<Button
    ...
    app:onClick="@{mvvm.onClick}"/>

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

另一个

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<Button
    ...
    app:onClick="@{view.onClick}"/>

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

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

他们中哪一个是对的? 如果两者都错误,如何在MVVM模式下为Android实现Command?


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

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

为了解决这种棘手的情况,我已更改为第二种方法,即layout.xml拥有对view的引用,而view拥有对viewModel的引用。在view.onClick事件中,我将首先进行与布局有关的任何编码,然后调用viewModel.onClick执行一些核心逻辑,或者根据需要连接到模型。

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

我认为,这个问题没有对与错。这取决于您的情况和个人喜好。