Por lo tanto, tengo 2 tipos de datos, algunos necesitan persistir y otros no.iPhone - Arquitectura para viewController y solicitudes de red
Estoy pensando en dónde poner todo mi código relacionado con la red, dentro de mis UIViewControllers, donde comienza toda la solicitud de red, o en otra capa.
Lo que tenía en mente es la siguiente:
tienen una capa llamada NetworkManager
. NetworkManager
es cantante en todas mis llamadas a servicios web.
Para los datos que deben ser persistentes y pueden presentarse en una lista, el administrador de red emite la solicitud, guarda la respuesta en mi base de datos local y escucha mis datos UIViewController
usando FetchResultsController
.
Pero hay muchos otros tipos de solicitudes. Por ejemplo: solicitud de inicio de sesión, solicitud de información de usuario, friendsNearBy, etc. ... algunos no tienen que ser persistentes en mi base de datos, y algunos no se ajustan a la arquitectura de FRC.
Para este tipo de solicitud, por lo que veo, hay 2 maneras de manejar que:
1. tener otra capa que separa entre las ViewControllers y el NetworkManager. Llamémoslo Mediator
. El Mediator
obtiene la solicitud de diccionario (JSON) de networkManager, decide de acuerdo con la lógica de la aplicación si hay algo más que hacer con ella y luego publica una notificación con el nombre y los datos apropiados. Si el mediador guarda el UIViewController que emitió la solicitud, puede delegar la respuesta directamente a él en lugar de publicar una notificación.
El flujo sería así:
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. no tener esta arquitectura en capas 3, pero en lugar de tener MyUiViewControllers, emitir una solicitud de red con bloques. Significando que en lugar de que el Mediator intercepte la respuesta antes de MyUiViewController, simplemente deja que MyUiViewController maneje la respuesta usando bloques ya que él es el que lo emite.
Pros:
Simple and quick to code
Easy to understand
Cons:
Coupling of network code inside your controllers
Tenía la esperanza de obtener sugerencias y comentarios acerca de qué es lo mejor de la experiencia de las personas, o de otra manera mejor de hacer esto /.