Wo soll ich Methoden platzieren, die eine HTTP-Anforderung zum Abrufen von Daten von einem Webdienst in der iOS-Entwicklung erstellen?

9

Ich habe ein Modellauto in meiner iOS-Anwendung, dessen Parameter wie Name, Jahr, Wert usw. von einem Webdienst abgerufen werden, um eine Liste mit Fahrzeugdaten zu füllen.

Wo soll ich die Methode ablegen, die asynchron zum Server geht und ein Array von Autos zurückgibt (diese Methode konvertiert den JSON bereits in ein Auto-Array)?

Mein aktueller Ansatz ist eine statische Methode in meiner Car-Klasse, die einen HttpClient empfängt (damit ich ihn in einem Unit-Test testen kann, der den Client verspottet) und ein NSArray von Autos zurückgibt. Ist das gut?

Was habt ihr in dieser Situation gemacht?

Ich mache mir Sorgen, weil ich kürzlich angefangen habe, sauberen Code zu lesen, der besagt, dass eine Klasse nur eines tun soll, und die Art und Weise, wie ich sie jetzt habe, scheint zwei Dinge zu tun (Informationen über ein Auto halten und eine Liste der Autos erhalten).

Raphael Oliveira
quelle

Antworten:

4

Ich würde ein CarBroker-Objekt empfehlen, das Anfragen nach Autos verarbeitet und Methoden wie die folgenden bereitstellt:

  1. getCars - um eine Liste aller Autos zu erhalten.
  2. getCarByID - für ein bestimmtes Auto.

Ferner kann ein solches Objekt Anfragen von anderen Auto-Brokern bearbeiten (falls dies erforderlich sein sollte). In beiden Fällen hat es einen wirklichen Verantwortungsbereich - das Vermitteln von Autos - im Gegensatz dazu, ein Autoobjekt mit den Verantwortlichkeiten eines Autoobjekts und eines Objektvermittlers zu sein.

J-Boss
quelle
Das hört sich gut an, denn jetzt haben Sie ein sauberes Autoobjekt, das wiederverwendet werden kann. Was ist, wenn Sie ein anderes Zugriffsprotokoll zum Abrufen von Daten verwenden? In diesem Szenario, in dem Sie irgendwo anfangen müssen, wissen Sie, dass alles, was Sie auf einer Seite verarbeiten, um Autoobjekte zu akzeptieren. Dann können Sie mit der Neuimplementierung des CarBroker mit REST oder was auch immer beginnen, aber Sie sind bereits auf halbem Weg und müssen keine Logik neu programmieren und erneut testen, die an sich nur mit einer Autoabstraktion zusammenhängt .
Andyz Smith
1

Hier sollte die Aufbewahrung eines anderen Objekts an einem Ort aufbewahrt werden müssen, an dem nicht garantiert werden kann, dass der Elternteil immer am Leben ist, um die Antwort zu verarbeiten.

Ich schlage vor, diese Implementierung in einer Singleton-Klasse zu belassen. Das Beibehalten dieser Klasse ist auch nützlich für einige generische Methodenimplementierungen, die sehr häufig aufgerufen werden können.

Oruvan
quelle
-1

Sie können die asynchrone Methode innerhalb der ViewDidLoad-Methode aufrufen, wenn das Array aus dem Web zurückkehrt. Aktualisieren Sie die Ansicht. Sie können das Array in der Datenbank speichern, sodass Sie nicht jedes Mal Daten aus dem Web laden müssen, wenn der Viewcontroller geladen wird.

Lerner
quelle
3
Wie beantwortet dies die gestellte Frage?
Mücke