我们公司使用MVP模式开发Android应用已经有一段时间了。使用MVP,我们将所有业务逻辑放进presenter中,而Activity/Fragment则只负责在接收到来自presenter的事件回调时更新视图。
现在,我们决定尝试使用Android Databinding来使用MVVM。看起来,使用MVVM,我们可以把所有的业务逻辑都放在ViewModel中(就像MVP中的Presenter一样),并且还可以通过一个对象通知视图对数据模型进行任何更改。
但是,这也引发了一个问题,什么应该留给Activity/Fragment去处理呢?因为我们采用了MVP模式以避免臃肿的Activity/Fragment。我们不想拥有瘦的Activity/Fragment和臃肿的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
}
}