MVP. Взаимодействие Room с presenter (LiveData)
подскажите пожалуйста как выстроить схему взаимодействия Presenter и Room. Не понимаю как переделать паттерн MVVM на MVP: В паттерне MVVM в классе ViewModel мы обращаемся к БД через дао, получаем данные и устанавливаем их Вьюхам:
public class MainViewModel extends AndroidViewModel{
private static NotesDatabase database;
private LiveData<List<Note>> notes;
public MainViewModel(@NonNull Application application){
super(application);
database = NotesDatabase.getInstance(getApplication());
notes = database.notesDao().getAllNotes();
}
public LiveData<List<Note>> getNotes(){
return notes;
}
public void insertNote(Note note){
new InsertTask.execute(note);
} ....и тд
Теперь чтобы сделать тоже самое с паттерном MVP, я создаю презентер, а где писать логику которая у нас была во ViewModel в MVVM? В самом презентере? Т.е. я просто переношу весь код обращения к бд из ViewModel к презентеру?
Во ViewModel в конструкторе мы инициализируем БД и в параметрах получаем Application, потом в активности в onCreate прописываем следующее:
viewModel = ViewModelProviders.of(this).get(ViewModel.class);
viewModel.getData().observe(this, new Observer<List<Note>>(){
@Override
public void onChanged(@Nullable List<Note> note){
adapter.setNote(note);
}
});
Как и где в случае с презентером сделать данную реализацию? так же в активности?
Ответы (1 шт):
В ответ на второй вопрос могу посоветовать воспользоваться библиотекой Moxy (https://github.com/Arello-Mobile/Moxy). Она очень удобно позволяет работать с презентером при проектировании на паттерне MVP, а также автоматически сохраняет состояние вашей активити/фрагмента. На ютубе есть несколько видео обучающих для данной библиотеки. Лично я, когда переписывал свой проект с MVVM на MVP, воспользовался этой библиотекой и этим видео https://www.youtube.com/watch?v=OHzTBEBYNAM&t=2645s и все удачно получилось. Удачи!