rambler-digital-solutions / rambler-it-ios

open source VIPER application
MIT License
332 stars 57 forks source link

Можно ли взаимодействовать с сервисами не только через интеракторы? #162

Closed krasnodar95 closed 6 years ago

krasnodar95 commented 7 years ago

У меня есть AuthorizationService. Мне нужно вызвать у него unathorize когда от сервера на любой мой запрос придет статус 401. За запросы у меня отвечает NetworkManager(он находится в core layer). Будет ли верно если я вызову метод unathorize прямо из NetworkManager?

ignatovv commented 7 years ago

Нет, это не логика кор слоя.

suriksarkisyan commented 7 years ago

@krasnodar95, можно, но у тебя немного не тот случай. А если завтра появится кейс, что при 401 надо обновить токен и отправить запросы, которые не прошли, заново? Лучше создать какой-то промежуточный объект, который будет заниматься такой логикой. Еще для подобных случаев можно использовать COOperation

krasnodar95 commented 7 years ago

@suriksarkisyan Спасибо за быстрый ответ) Я понимаю что между NetworkManager'ом и AuthorizationService'ом неплохо было бы запихнуть такой объект. Но в целом будет верно если я вызову метод unathorize из этого промежуточного объекта?

krasnodar95 commented 7 years ago

@ignatovv А в какой слой нужно вынести?

smejl commented 7 years ago

Добавь NetworkClient в кор слой, NetworkManager сделай обёрткой над ней. И в этом случае вызывай спокойно unathorize метод сервиса авторизации в NetworkManager.

krasnodar95 commented 7 years ago

@mejl NetworkManager в данном случае будет являться частью слоя сервисов? И вопрос вдогонку, можно ли делать связи между сервисами напрямую?

ignatovv commented 7 years ago

@krasnodar95 нет https://www.youtube.com/watch?v=Eman1j06YsU

AgranatMarkit commented 7 years ago

@krasnodar95 Сделай фасад над NetworkManager, и в случае возврата 401 статуса, вызывай из этого фасада unathorize у AuthorizationService. Ну или если ты не хочешь обращаться из кор слоя в сервис авторизации(пускай даже через фасад), то лучше дописать в каждом сервисе, который использует NetworkManager, обработку 401 ошибки, через замыкание anauthorizedHandler или метод didReceiveAnauthorized у делегата. И соотвественно сделать фасад над каждым таким сервисом, который в ответ на замыкание anauthorizedHandler или на вызов didReceiveAnauthorized, вызывал unathorize у AuthorizationService.