Где я должен разместить основные методы определения местоположения в проекте VIPER/MVP iOS?
Я много искал, я понимаю, что контроллер представления на самом деле является "представлением" в архитектуре Viper или MVP, и Presenter содержит логику... Но поскольку докладчик должен легко тестироваться, хорошо ли размещать материал Core Location (как LocationManager и обновления местоположения) в докладчик? Или я должен поставить в поле зрения контроллер и уведомить докладчика?
1 ответ
Я бы решил это, создав LocationService
объект, который оборачивает все методы Core Location и предоставляет их выходные данные, возможно, отображает результаты обновления местоположения в виде потока (если вы используете Rx) или обратного вызова.
Я бы использовал Dependency Injection (возможно, используя Swinject), чтобы внедрить это в уровень презентатора в MVP или на уровень интерактора в VIPER (поскольку информация о местоположении предположительно влияет на основную бизнес-логику приложения). Чтобы протестировать приложение, создайте "фиктивную" версию этого сервиса, обслуживающего тестовые данные, и внедрите его в докладчик / интерактор в ваших тестах.