#java #android #mvp
Подскажите пожалуйста, более правильный вариант:
Presenter и адаптер содержат ссылку на List. Presenter добавляет, удаляет, изменяет
items, сообщаяет item position во view, view просто обновляет адаптер. (notifySetDataChanges)
Только адптер содержит ссылку на List и сам добавляет, удаляет, изменяет items по
команде от view. Presenter передает во view полноценный объект и команду что нужно
сделать, добавить, удалить или изменить.
Или есть какие то другие классические варинты?
Ответы
Ответ 1
Самое важно в этом вопросе является : используется ли в вашем проекте Immutable objects. Если нет, то изменение объекта в Presenter списке будет отображено и в списке Adapter. Если да, то необходимо всегда полностью заменять объекты при их изменении. Второй вариант удобно использовать в паре с SortedList и DiffUtil. Эти классы упрощают работу со списком в RecyclerView. DiffUtil позволяет чётко определить изменения в списке, и уведомить именно об этих изменениях. На основе этого решения Presenter говорит View: deleteElement(Element e); insertNewElement(Element e); updateElement(Element e); insertNewElements(Listelements) // Используй DiffUtil для этого случая Получается, что в Adapter и Presenter будут иметь разные ссылки на коллекции, но одни ссылки на объекты этих коллекция. Вся логика определения изменения исходного списка ложиться на Presenter. Он должен определить изменения и сообщить View об этом: deleteElement(int position); updateElement(int position); insertNewElements(List elements, int position); insertNewElement(Element e, int position);
Комментариев нет:
Отправить комментарий