【发布时间】:2017-03-22 00:07:49
【问题描述】:
我们公司一直在使用 MVP 模式开发 Android 应用程序。在 MVP 中,我们将所有的业务逻辑放在 Presenter 中,而 Activity/Fragment 则只负责在收到 Presenter 的事件回调时更新视图。
现在,我们决定尝试使用 Android 数据绑定的 MVVM。似乎使用 MVVM,我们可以将所有业务逻辑放在 ViewModel 中(就像 MVP 中的 Presenter 一样),并且还可以将数据模型的任何更改通知视图,都在一个对象中。
但是,这在我们的脑海中提出了一个问题,我们应该让 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
}
}
【问题讨论】:
标签: java android mvvm android-databinding