@eugene_matsyuk Основные проблемы начинаются, когда тебе более авторитетный разарботчик вбрасывает такие идеи, которые сильно усложняют жизнь. Вначале я пробрасывал в presenter все методы жизненного цикла Activity. Кто-то сказал, презентер не должен знать о жизненном цикле. Ну для этого есть методы bindView unBindView и вроде их хватает.
Потом кто-то сказал, что нельзя контектс в презентере. У меня большинство случаев использования контектса в презентере - это строковые ресурсы. Все остальные боллее сложные вещи (например работы с пермишенсами) я оставляю в Activity, так как это все сильно завязано на Android. И вот со строками - либо кучу методов созадавать во View, типа покажи такую строчку, покажи такую. Либо один метод - отобрази конкретную строку у конкретного TextView. B вот если просто строчку нужно достать из ресурсов, то можно смело id строки передвать. Но если есть форматирование строки, или plurals, то уже нужен контекст в презентере. Ну и доходит до такого, что в презентер инжектится какой-нибудь ResourcesResolver, который имеет контекст и выдает тебе нужные строки. Но это сильно усложняет жизнь. Да и для тестирования презентера можно спокойно замокать context и выдавать нужные строки. Ну и вы говорите, мол, если жизненно необходимо, можно контекст и в интерактор прокинуть. И мне нравитсят такой подход. Когда начинаешь прямо слепо следовать принципам, то иногда сталкиваешься с оверхедом, нужно просто понимать почему ты себе позволяешь пробросить контекст в презентер, и что после этого будет.
Также понравился раздел про валидацию полей и enable/disable кнопки. Я лично это просто в презентере делал, но мне понравилось как вы закинули в интерактор и покрыли тестами. И с тестами у вас рельно все позновательно и понятно.
Также был момент, что кто-то сказал, что у презентера все методы должны называться как события. Типа произошло это, произошло то. И в таком подходе нельзя сказать презентеру загрузи данные, нужно назвать метод типа "готовДляДанных". Тоже за это долго парились. А на самом деле это такой бред и у вас это хорошо продемонстрированно, что можно иметь в презентере методы listenFields, loadPersonalInfo и говорить презенеру, что делать.
В общем все проблемы от того, что все по своему интерпритируют MVP и накладывают ограничения и впадают в крайности. У вас же все более гибко, и чувствуется, что подход - это инструмент, а не набор ограничений.