2009-03-16 12 views
0

モデル階層に関してソリッドなRESTful iPhoneクライアントを構築するためにほとんどの方が採用している戦略が不思議です。モデル階層が意味するのは、いくつかのリソースが互いに相関関係を持つRESTサーバーを持っているということです。例えば、仮説的な目的のために、学校に関する情報を吐き出すRESTサーバーがあるとしましょう。特定のクラスのすべての生徒をつかみたいのであれば、まずRESTサーバーに照会してその学校の情報を調べる必要があります。次に、サーバーに照会して、学校が提供するすべてのクラスに関する情報を照会する必要があります。その後の特定のクラスのすべての生徒に対する要求。 1日の終わりに、クライアントは3つのユニークなXMLツリーを持ち込んでいます。その時点で、データソースとなる最終的なツリーを構築するために、皆さんのほとんどが独自のアルゴリズムを作成していますか?この点でXMLツリーを集約するのではなく、別のアプローチを使用しますか?RESTful iPhoneクライアントとモデル階層

どのようにして、サーバー上で無数の関連リソースを取得し、それらをクライアント上で意味をなさない1つのツリーに取得するのが好きですか?

洞察をいただきありがとうございます。

答えて

2

あなたのモデルデータをiPhoneに管理する方法は、扱うXMLデータがどれほど変わる可能性があり、どれほど肥大化するかによって決まります。

これは単純なXMLモデルで、変更する可能性は低く、冗長な情報はそれほど多くありません。そのまま記述したXMLツリーを使用するだけでよいでしょう。

でも少し複雑でも、私はObjective-Cコードで最も簡単に操作できる形式にXML表現を変換する方が好きです。たとえば、JSONやSOAP形式のデータと同様のデータを提供する他のWebベースのサービスをサポートするために、アプリケーションがある程度拡張される可能性を考えてみましょう。今では、アプリケーションで3種類のモデルを維持するという頭痛にぶち込まざるを得なくなります。

私はXMLベースのRESTリソースを、ローカルで操作可能な形式にマッサージする必要がある「外部データ」として扱います。アプリ固有の操作を簡単に実行できるローカル形式を採用すると、他の外部形式からの入力を調整し、アップロード/編集/その他のために必要に応じて外部形式に変換することができます。我々は安定したポイントにそれを得るとき

ダニエル

0

私は現在、この問題を解決するためのプロジェクトに取り組んでいますが、私たちはコードをリリースする予定。

サーバーから戻ってくるすべてのオブジェクトをシリアライズするための標準化されたシステムがないと、非常に難しい問題です。幸いなことに、このプロジェクトでは共通のシリアライゼーションメカニズムを使用しているため、抽象SAXパーサーを構築してからtype introspectionNSCodingを使用してObjective-CとXMLのギャップを埋めています。あなた自身で同様のコンセプトを実行することができます。

NSURLConnectionNSXMLParserを処理するためにいくつかのクラスを作成/再利用しましたが、タイプイントロスペクションの代わりにDelegation Patternを使用しました。

0

私自身のケースでは、ASIHTTPRequestのラッパーを使用してRESTfulクエリを作成しています。私は結果をlibxml2で処理しており、ユーザーインターフェイスにレンダリングされたモデルオブジェクトに直接解析されています。

私はキャッチオールのソリューションを持っているかどうかはわかりませんが、再利用可能な別の方法に機能を分けることから多くの利益を得ると思います。この方法で、戻ってくるXMLツリーの数について心配する必要はありません。あなたが持っているものに問合せを発行するだけで、インターフェースを作成することができます。

2

IPhone on Railsというプロジェクトがあり、Objective-Cの実装はActiveResourceです。私はまだそれを試してみる機会がありませんでしたが、チェックアウトする価値があります。