Итак, у меня есть 2 типа данных, некоторые нужно сохранять, а некоторые нет.
Я думаю о том, куда поместить весь мой сетевой код, внутри моих UIViewControllers, откуда начинаются все сетевые запросы, или на другом уровне.
Я имел в виду следующее:
Иметь слой с именем NetworkManager
.
NetworkManager
отвечает за все вызовы моих веб-служб.
Для данных, которые должны быть постоянными и могут быть представлены в виде списка, я бы попросил сетевого менеджера выдать запрос, сохранить ответ в моей локальной базе данных основных данных и заставить мой UIViewController
слушать это. данные с помощью FetchResultsController
.
Но есть много других типов запросов. Например: запрос на вход, запрос информации о пользователе, friendsNearBy и так далее… некоторые не должны быть постоянными в моей базе данных, а некоторые не соответствуют архитектуре FRC.
Для этого типа запроса, насколько я вижу, есть 2 способа обработки:
1. Иметь еще один уровень, который разделяет ViewControllers и NetworkManager.
Назовем его Медиатор
. Посредник
получает запрос словаря (JSON) от networkManager, решает в соответствии с логикой приложения, нужно ли с ним что-то еще делать, а затем публикует уведомление с соответствующим именем и данными.Если посредник сохраняет UIViewController, выдавший запрос, он может делегировать ответ непосредственно ему, вместо публикации уведомления.
Поток будет таким:
MyUiViewController - > Mediator -> NetworkManger->Mediator-> PostNotification (or directly back to MyUiViewController)
Pros:
Decoupling
Nice structure and separation of concerns
Cons:
Harder to code
Sometimes harder to understand and debug.
2. Не имея этой трехуровневой архитектуры, но вместо этого имея MyUiViewControllers, выдайте сетевой запрос с блоками. Это означает, что вместо того, чтобы Посредник перехватывал ответ до MyUiViewController, просто позвольте MyUiViewController обрабатывать ответ, используя блоки, поскольку именно он его выдает.
Pros:
Simple and quick to code
Easy to understand
Cons:
Coupling of network code inside your controllers
Я надеялся получить предложения и комментарии о том, что лучше из опыта людей, или о другом/лучшем способе сделать это.