2009-03-16 6 views
0

Ich bin gespannt welche Strategie die meisten von Ihnen verwenden, um solide RESTful iPhone Clients in Bezug auf Modellhierarchien aufzubauen. Was ich unter Modellhierarchien verstehe, ist, dass ich einen REST-Server habe, in dem mehrere Ressourcen miteinander korrelieren. Zum Beispiel, sagen wir zu hypothetischen Zwecken, habe ich einen REST-Server, der Informationen über eine Schule ausspuckt. Wenn ich alle Schüler in einer bestimmten Klasse anfassen will, muss ich zuerst den REST - Server nach Informationen über die Schule fragen, dann muss ich den Server nach Informationen über alle Klassen fragen, die die Schule anzubieten hat, gefolgt von einem anschließende Anfrage für alle Schüler in einer bestimmten Klasse. Am Ende des Tages bringt der Kunde 3 einzigartige XML-Bäume mit. Schreiben die meisten von Ihnen zu diesem Zeitpunkt Ihre eigenen Algorithmen, um den endgültigen Baum zu erstellen, der letztendlich Ihre Datenquelle sein wird? Kombinieren Sie XML-Bäume nicht in dieser Hinsicht und verwenden Sie stattdessen einen anderen Ansatz?RESTful iPhone Client und Modellhierarchie

Wie ziehen Sie es vor, eine Unzahl verwandter Ressourcen auf dem Server zu verwenden und sie in einen Baum zu integrieren, der nur auf dem Client sinnvoll ist?

Danke für die Einsicht.

Antwort

2

Wie Sie Ihre Modelldaten auf dem iPhone verwalten, hängt wahrscheinlich davon ab, wie stark die XML-Daten, mit denen Sie es zu tun haben, variieren und wie aufgebläht es sein könnte.

Wenn es sich um ein einfaches XML-Modell handelt, das sich kaum ändern wird und nicht sehr viele redundante Informationen enthält, sollten Sie die XML-Bäume, die Sie beschreiben, einfach verwenden.

Aber für etwas sogar etwas komplexeres, bevorzuge ich XML-Darstellungen in ein Format zu übersetzen, das am leichtesten von meinem Objective-C-Code manipuliert wird. Betrachten Sie beispielsweise die Möglichkeit, dass Ihre Anwendung eines Tages erweitert wird, um andere webbasierte Dienste zu unterstützen, die ähnliche Daten bereitstellen, jedoch als JSON- oder SOAP-formatierte Daten. Jetzt fangen Sie an, sich mit der Pflege von 3 verschiedenen Typen von Modellen in Ihrer Anwendung zu befassen, wenn es vorzuziehen wäre, nur eine zu pflegen.

Ich würde die XML-basierten REST-Ressourcen als "fremde Daten" behandeln, die in ein lokal manipulierbares Format massiert werden müssen. Wenn Sie ein lokales Format verwenden, das die Durchführung Ihrer anwendungsspezifischen Vorgänge maximiert, können Sie Eingaben von jedem anderen fremden Format anpassen und nach Bedarf in fremde Formate konvertieren, um sie hochzuladen/zu bearbeiten.

Daniel

0

Ich bin derzeit an einem Projekt arbeiten, dieses Problem zu lösen, werden wir den Code veröffentlichen, wenn wir sie zu einem stabilen Punkt.

Es ist ein sehr kniffliges Problem, wenn Sie kein standardisiertes System für die Serialisierung aller Objekte haben, die vom Server zurückkommen. Zum Glück haben wir bei diesem Projekt einen gemeinsamen Serialisierungsmechanismus, also haben wir einen abstrakten SAX-Parser erstellt, von dem wir erben, und dann type introspection und NSCoding verwenden, um die Lücke zwischen Objective-C und XML zu überbrücken. Sie können ein ähnliches Konzept auf eigene Faust machen.

Vor diesem Projekt, ich habe gerade gebaut/wiederverwendet ein paar Klassen die NSURLConnection und NSXMLParser Arbeit zu handhaben, sondern vom Typ Innerlichkeit, benutzte ich die Delegation Pattern.

0

In meinem Fall habe ich Wrapper um ASIHTTPRequest verwendet, um RESTful-Abfragen zu erstellen. Ich habe die Ergebnisse mit libxml2 verarbeitet, direkt in Modellobjekte geparst, die in die Benutzeroberfläche gerendert wurden.

Ich bin mir nicht sicher, ob ich eine Catchall-Lösung für Sie habe, aber ich denke, Sie werden eine Menge davon gewinnen, wenn Sie die Funktionalität in verschiedene, wiederverwendbare Methoden aufteilen. Auf diese Weise müssen Sie sich weniger Gedanken über die Anzahl der zurückkommenden XML-Bäume machen. Sie geben nur Abfragen an was auch immer Sie haben, um Ihre Schnittstelle zu füllen.

2

Es gibt ein Projekt namens IPhone on Rails, in dem sie eine Objective-C-Implementierung von ActiveResource erstellt haben. Ich hatte noch keine Gelegenheit, damit zu spielen, aber es könnte einen Besuch wert sein.