Где я должен разместить методы Core Location в проекте VIPER/MVP iOS?

Я много искал, я понимаю, что контроллер представления на самом деле является «представлением» в архитектуре Viper или MVP, а презентатор содержит логику... Но поскольку презентер должен быть легко тестируемым, хорошо ли помещать материал Core Location ( например, LocationManager и обновления местоположения) в презентатор? Или я должен ввести контроллер представления и уведомить ведущего?


person Rico Crescenzio    schedule 18.01.2018    source источник


Ответы (1)


Я бы решил эту проблему, создав объект LocationService, который обертывает все методы Core Location и предоставляет их выходные данные, возможно, отображая результаты обновлений местоположения в виде потока (если вы используете Rx) или обратного вызова.

Я бы использовал внедрение зависимостей (возможно, используя Swinject), чтобы внедрить это в уровень презентатора в MVP или уровень взаимодействия в VIPER (поскольку информация о местоположении предположительно влияет на основную бизнес-логику приложения). Чтобы протестировать приложение, создайте «фиктивную» версию этой службы, обслуживающую тестовые данные, и внедрите ее в презентатора/интерактора в своих тестах.

person Rich Tolley    schedule 18.01.2018