gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 21:30:55 26 4
gpt4 key购买 nike

我们公司一直在使用 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 anyview logic

enter image description here

reference

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com