rambler-digital-solutions/rambler-it-ios

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

krasnodar95 opened this issue · 8 comments

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

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

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

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

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

smejl commented

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

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

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