У меня есть приложение, разработанное с использованием шаблона MVP. Но иногда я не уверен, что все наши реализации соответствуют рекомендациям MVP. Хотя в книге не всегда возможно работать, я пытаюсь выяснить, где должна быть логика, которая касается не-пользовательских взаимодействий.MVP и взаимодействие с пользователем
Например:
Я должен обнаружить смещение вертикально прокрутки RecyclerView. Когда прокрутка достигает 20% от высоты содержимого (примерно), я должен показать всплывающее окно. Теперь моя логика будет (псевдокод)
1. Presenter sets View.setVerticalOffsetTriggeringLimit(1000 pixels)
2. View triggers view event and call Presenter.offsetForPopUpReached()
3. Presenter triggers View.showPopUp()
4. pop up is shown
Плюсы и минусы? Есть ли способ сделать это лучше, еще имея тестовый код? Является ли сама система «пользователем», которая должна использовать презентатор в качестве среднего слоя?
Ну, я могу спорить об этом. Наличие Presenter, который обновляет представление после нажатия кнопки, не отличается от прокрутки 1000 пикселей и запуска события. В любом случае модели остаются отделенными от вида. Все дело в тестировании прецедента и наличии актера, который не обязательно является человеком, но часть пользовательского интерфейса должна рассматриваться одинаково. Подобные события - это не только элементы пользовательского интерфейса, но целая цепочка событий, которые могут (или не могут) взаимодействовать также с моделями. – shadox
Да, я думаю, вы прямо здесь. Попробуйте использовать здесь «посредник» - интерфейс, абстрагирующее событие прокрутки и его реализацию с помощью RecyclerView, который передается вView. Его можно заменить макетным для тестирования. –