в чем профит? Чем такой подход лучше переноса этой логики во вью?
Если произошли изменения в логике, то нужно менять логику, что в этом странного? "Пришли правки дизайна. Мне теперь нужно показать диалог пользователю, если ошибок в валидации больше чем n" — это правки логики. Правки дизайна — изменение цвета диалога. Или форматирования.
Если произошли изменения в логике, то нужно менять логику, что в этом странного? "Пришли правки дизайна. Мне теперь нужно показать диалог пользователю, если ошибок в валидации больше чем n" — это правки логики. Правки дизайна — изменение цвета диалога. Или форматирования.
Вы не ответили на мой вопрос. Чем это все таки лучше?
Тем, что это можно покрыть юнит тестами без использования компонентов андроид. И прогонять при каждом изменении кода в другом месте.
А кроме как с точки зрения скорости прогонки тестов? С точки зрения архитектуры приложения? Ведь тогда при изменениях вью (нормальных, а не цвет поменять) мы начинаем менять сразу несколько компонетов и вью и пресентер. Какая уж тут слабая связанность компонент? Мы просто взяли и размазали логику по двум классам. И тогда действительно хороший вопрос какое место адаптера в этой схеме. Допустим у нас раньше был лист с элементами в которых содержатся чекбоксы и можно выбрать несколько вариантов данных. А теперь у нас в элементах добавился EditText и пользователь может вводить произвольные данные. Как данные изменения отражаются на пресентере?
А кроме как с точки зрения скорости прогонки тестов? С точки зрения архитектуры приложения? Ведь тогда при изменениях вью (нормальных, а не цвет поменять) мы начинаем менять сразу несколько компонетов и вью и пресентер. Какая уж тут слабая связанность компонент? Мы просто взяли и размазали логику по двум классам. И тогда действительно хороший вопрос какое место адаптера в этой схеме. Допустим у нас раньше был лист с элементами в которых содержатся чекбоксы и можно выбрать несколько вариантов данных. А теперь у нас в элементах добавился EditText и пользователь может вводить произвольные данные. Как данные изменения отражаются на пресентере?
Во-первых, презентер и вью - это слой представления. И это ожидаемо, что если меняется представление, то возможны правки обоих классов. Во-вторых, мы не размазываем логику по двум классам - она по-прежнему останется в презентере. Вью просто дёрнет новый метод у презентера. Про адаптер дополню позже.
Адаптер - сам по себе элемент, в котором много всего завязано. Но ваш кейс, по-моему, относительно прост. Список данных, которые нужны презентеру, вьюха передаёт в виде списка содержимого чекбоксов + данные, введённые в эдит вью. Презентер их чистит, если нужно (trim, например), и пробрасывает дальше в бизнес логику (или предварительно в мапперы)
Адаптер - сам по себе элемент, в котором много всего завязано. Но ваш кейс, по-моему, относительно прост. Список данных, которые нужны презентеру, вьюха передаёт в виде списка содержимого чекбоксов + данные, введённые в эдит вью. Презентер их чистит, если нужно (trim, например), и пробрасывает дальше в бизнес логику (или предварительно в мапперы)
А кто занимается фильтрацией списка? адаптер или пресентер?
А кто занимается фильтрацией списка? адаптер или пресентер?
у меня была подобная задача вью должна отображать список и давать возможность пользователю отфильтровать по введённому слову я сделал у презентера два метода update() и updateFromKeys(String keys) а у вью был один метод update(List<Data> data) т.е. презентер собирал либо все данные либо данные по фильтру и отдавал вью в один метод а вью просто отображал что получает - т.е. вью вообще не думает
у меня была подобная задача вью должна отображать список и давать возможность пользователю отфильтровать по введённому слову я сделал у презентера два метода update() и updateFromKeys(String keys) а у вью был один метод update(List<Data> data) т.е. презентер собирал либо все данные либо данные по фильтру и отдавал вью в один метод а вью просто отображал что получает - т.е. вью вообще не думает
а если нужна красивая анимация? внутри RecyclerView
а в чём проблема? адаптер получает новые данные и в зависимости от них анимирует изменения я бы так сделал
то есть адаптер получает новую коллекцию, сравнивает со старой коллекцией. Вычисляет индексы элементов которые были удалены. Потом сетит новые данные. Потом нотифает удаленее. А не слишком ли много лишних вычислений и бегания по классам Adapter -> View -> Presenter -> View -> Adapter