Итак, у меня есть 2 типа данных, некоторые должны быть сохранены, а некоторые нет.
Я думаю о том, куда поместить весь мой связанный с сетью код, внутри моих UIViewControllers, откуда все сетевые запросы начинаются, или на другом уровне.
Я имел в виду следующее:
Есть слой под названием NetworkManager
.
NetworkManager
является singerlton для всех моих вызовов веб-службы.
Для данных, которые должны быть постоянными и могут быть представлены в виде списка, я бы попросил администратора сети выполнить запрос, сохранить ответ в моей локальной базе данных базовых данных, и мой UIViewController
прослушивал эти данные, используя FetchResultsController
.
Но есть много других типов запросов. Например: запрос входа в систему, запрос информации о пользователе, friendsNearBy и т. Д.… Некоторые не обязательно должны быть постоянными в моей базе данных, а некоторые не соответствуют архитектуре FRC.
Для такого типа запросов, насколько я вижу, есть 2 способа его обработки:
1. Есть еще один слой, который разделяет ViewControllers и NetworkManager.
Давайте назовем это Mediator
. Mediator
получает запрос словаря (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, выдает сетевой запрос с блоками. То есть вместо того, чтобы Mediator перехватывал ответ перед MyUiViewController, просто позвольте MyUiViewController обрабатывать ответ с использованием блоков, поскольку он является тем, который его выдает.
Pros:
Simple and quick to code
Easy to understand
Cons:
Coupling of network code inside your controllers
Я надеялся получить предложения и комментарии о том, что лучше из опыта людей или другого / лучшего способа сделать это.