Почему не выбрали MVP
Что проверяют
Это вопрос про обоснование решения. Проверяют, знаете ли вы MVP по существу и можете ли объяснить выбор ограничениями проекта, а не модой на архитектуры.
Как отвечать
Сначала показать, что паттерн понятен: view спрятан за протоколом, presenter держит логику представления и ничего не знает о UIKit, модель отдельно. Тестируемость при этом высокая, presenter проверяется на подменённом view без запуска интерфейса.
Дальше назвать причины, привязанные к проекту:
- экраны на SwiftUI: view декларативный и перерисовывается от состояния, императивные вызовы вроде
view?.showError()ложатся плохо, состояние удобнее держать в наблюдаемом объекте, и получается MVVM; - много асинхронных источников: с Combine или
async/awaitсвязка «состояние в свойстве, view подписан» короче, чем протокол на два десятка методов; - в команде уже принят один подход, и второй ради одного модуля обойдётся дороже, чем неидеальный, но единый;
- на простых экранах протокол view и ручная проброска каждого обновления дают файлы и ритуал без отдачи.
Заканчивать честной рамкой: MVP уместен там, где view императивный и логики отображения много, и переходить на него стоит от конкретной боли, а не заранее.
Где спотыкаются
Ругают MVP за плохую тестируемость. Наоборот, протокол view делает его одним из самых удобных для тестов вариантов. Настоящие слабости в другом: presenter разрастается, состояние синхронизируется руками, и легко получить цикл ссылок между view и presenter.
Отвечают лозунгом «MVVM современнее». Интервьюер ждёт разбор ограничений, и следующий вопрос будет про то, что именно вам мешало. Без конкретики ответ заканчивается на первом уточнении.
Приносят выдуманный результат с процентами вроде «сократили разработку на треть». Такие числа никто не замеряет, проверяются они одним вопросом про методику замера, и после него рассыпается весь ответ. Лучше назвать конкретный экран и конкретную трудность.