java - MVVM 中的 Activity/Fragment 和 ViewModel 应该做什么

标签 java android mvvm android-databinding

我们公司一直在使用 MVP 模式开发 Android 应用程序。使用 MVP,我们将所有业务逻辑放在 Presenter 和 Activity/Fragment 中,然后在接收到来自 Presenter 的事件回调时只负责 View 更新。

现在,我们决定尝试使用 Android 数据绑定(bind)的 MVVM。似乎使用 MVVM,我们可以将所有业务逻辑放在 ViewModel 中(就像 MVP 中的 Presenter),并将数据模型的任何更改通知 View ,所有这些都在一个对象中。

但是,这在我们脑海中提出了一个问题,我们应该让 Activity/Fragment 处理什么?由于我们采用了 MVP 模式来避免 fat-activity/fragment。我们不希望先有 slim-activity/fragment,然后再有 fat-viewmodel

到目前为止,我们认为可以留给 Activity/Fragment 处理的事情

  • 请求/检查权限
  • 访问上下文
  • 访问资源

欢迎任何更正、评论或建议,因为我是 MVVM 的新手,即使它看起来与 MVP 类似。

谢谢。

再问一个问题

将 MVVM 与监听器(如 MVP)结合起来是否可行且良好实践?例如

public class MainActivityViewModel extends BaseObservable {

    MainActivityViewModelListener listener;
    User user;

    public void setMainActivityViewModelListener(MainActivityViewModelListener listener) {
        this.listener = listener;
    }

    public void refreshUser(View v) {
        // some user update via Internet
        notifyPropertyChanged(BR.userAlias);

        if (listener != null) {
            listener.onUserRefreshed(user);
        }
    }

    @Bindable
    public void getUserAlias() {
        return user.getAlias();
    }
}

public interface MainActivityViewModelListener {
    void onUserRefreshed(User user);
}

public class MainActivity implements MainActivityViewModelListener {

    MainActivityBinding binding;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        binding = DataBindingUtil.setContentView(R.layout.main_activity);


        MainActivityViewModel viewModel = new MainActivityViewModel();
        viewModel.setMainActivityViewModelListener(this);
        binding.setMainActivityViewModel(viewModel);
    }

    @Override
    public void onUserRefreshed(User user) {
        // do some update
    }
}

最佳答案

是的,您可以在 ViewModel 中拥有所有业务逻辑,这是我个人用来学习 MVVM 的一些链接

Approaching Android with MVVM
https://github.com/ivacf/archi
MVVM on Android: What You Need to Know

您可以提及 ViewModel 中的所有监听器以及您的模型将包含的数据。

ViewModel 更改了一些内容并通知绑定(bind)框架内容已更改。

Model - Data model containing business and validation logic
View - Defines the structure, layout and appearance of a view on screen
ViewModel - Acts a link between the View and Model, dealing with any view logic

enter image description here

reference

关于java - MVVM 中的 Activity/Fragment 和 ViewModel 应该做什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40485659/

相关文章:

android - 带有 GooglePlayServicesUtil.get Error Dialog() 的 Google Maps Android 应用程序

WPF ListView 双击

java - 从低通滤波转换

java - 没有堆栈跟踪的嵌入式 neo4j 崩溃

java - 在 Java 中根据 blob 的内容创建文件的代码片段

java - 比较 API/代码的文件

java - 如何查找微调器显示的下拉 View

java - Android 中 Web API 的异常处理

.net - 使用 MVVM 和 .NET MAUI 加载 View 时如何将焦点设置到特定条目控件

c# - 当 observablecollection 中的字段更改时列表框不更新