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