Also, ich habe 2 Arten von Daten, einige müssen beibehalten werden und einige nicht.iPhone - Architektur für ViewController und Netzwerkanfragen
Ich denke darüber nach, wo alle meine netzwerkbezogenen Code, in meinem UIViewControllers, wo alle Netzwerkanforderung starten, oder in einer anderen Schicht.
Was ich im Sinn hatte, ist dies:
eine Schicht NetworkManager
genannt haben. NetworkManager
ist singerlton für alle meine Web-Service-Anrufe.
Für Daten, die persistent sein müssen und in einer Liste angezeigt werden können, würde ich Netzwerkmanager die Anforderung ausgeben, die Antwort in meinem lokalen Kerndaten DB speichern und meine UIViewController
hören diese Daten mit FetchResultsController
.
Aber es gibt viele andere Arten von Anfragen. Zum Beispiel: Login-Anfrage, Benutzer-Info-Anfrage, friendsNearBy, und so weiter ... einige müssen nicht persistent in meiner db sein, und manche passen nicht in die FRC-Architektur.
Für diese Art der Anfrage, soweit ich sehe, gibt es 2 Möglichkeiten der Umgang mit ihm:
1. eine weitere Schicht, die zwischen den Viewcontrollers und der Networkmanager trennt. Nennen wir es Mediator
. Die Mediator
ruft die Wörterbuch (JSON) -Anfrage vom NetworkManager ab, entscheidet entsprechend der App-Logik, ob noch etwas zu tun ist, und sendet dann eine Benachrichtigung mit dem entsprechenden Namen und den entsprechenden Daten. Wenn der Mediator den UIViewController speichert, der die Anforderung ausgegeben hat, kann er die Antwort direkt an ihn delegieren, anstatt eine Benachrichtigung zu senden.
Der Flow würde so aussehen:
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. Nicht diese 3 Schichten-Architektur mit, sondern MyUiViewControllers, die Ausgabe einer Netzwerkanfrage mit Blöcken. Bedeutet, dass anstelle des Mediators, der die Antwort vor MyUiViewController abfängt, nur MyUiViewController die Antwort mit Blöcken verarbeiten kann, da er derjenige ist, der sie ausgibt.
Pros:
Simple and quick to code
Easy to understand
Cons:
Coupling of network code inside your controllers
Ich habe gehofft, Vorschläge und Kommentare zu bekommen, was von Menschen der Erfahrung am besten ist, oder andere/bessere Möglichkeit, dies zu tun.