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);
} ....и тд
  1. Теперь чтобы сделать тоже самое с паттерном MVP, я создаю презентер, а где писать логику которая у нас была во ViewModel в MVVM? В самом презентере? Т.е. я просто переношу весь код обращения к бд из ViewModel к презентеру?

  2. Во 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 и все удачно получилось. Удачи!

→ Ссылка