Наша компания разрабатывает Android-приложение с использованием шаблона MVP. С MVP мы помещаем всю бизнес-логику внутри презентатора и Activity/Fragment, а затем просто отвечаем за обновление вида при получении обратного вызова от ведущего.
Теперь мы решили попробовать MVVM с помощью Android Databinding. Похоже, что с MVVM мы можем поместить всю бизнес-логику в ViewModel (точно так же, как Presenter в MVP), а также уведомить представление (-ы) о любых изменениях модели данных, все в одном объекте.
Но тогда, этот поднимающий вопрос в нашем уме, что мы должны оставить, чтобы обрабатывать Activity/Fragment? Поскольку мы приняли шаблон MVP, чтобы избежать жировой активности/фрагмента. Мы не хотим иметь 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
}
}