単純なデータ構造のための別々のクラスを作成することは、Objective-Cで過剰です

I am creating simple web-service client inobjective-cand found that creating separate class fまたはeach kind of web-service's response could be overkill. Perhaps this becauseobjective-chas two files - H&M.

Webサービスからの応答のサンプルは次のとおりです。

{"name": "John", status: "OK"}

または

{"total": "5500", status: "OK"}

またはmore complex

{"location": {"x": "140", "y": "90", "z": "0"}, 
 "color": "red", status: "OK"}

I want to create separate class fまたはeach response, e.g. NameResponse, TotalResponse, LocationInfoResponse and subclass them from Response class.

私はいくつかのクラスを作成するために非常にコンパクトだが、Objective-CについてはわからないJavaでは確信している。

UPDATE 1 One reason to use classes over NSDictionary is that code is more safe and better defined, e.g.:

おもう

response.name

よりも良い

json valueForKey: "name"

それじゃない?

あなたは答えをどうやって書けばいいのでしょうか?この場合、それぞれの回答ごとにクラスがありますか?

2

3 答え

名前と値のコレクションでは、辞書オブジェクトが便利です。 ObjCの仕事がアップルのプラットフォーム上にある場合は、 NSDictionary を検討してください。

実際、JSONパーサには特定のクラスが必要なことに驚いています。 JSONはCocoaクラスできれいにマップします。オブジェクトのNSDictionary、配列のNSArray、スカラーのNSString、NSNumberがあります。

3
追加された
いいえ、私は進化するスキーマにとってより安定していると思います。また、はるかに簡単なパーサーコードが可能です。
追加された 著者 Seva Alekseyev,
NSDictionaryを直接動的に処理することで、そこから必要なすべてのプロパティを引き出すことは、データをクラスにラップし、クラスをファーストクラスのオブジェクトなどとして扱うよりも優れていると思いますか?
追加された 著者 Vladimir,

あなたのデータモデルを明確に指定することは、過度のことではありません。正式なデータ型は最も優れた仕様です。既に実装されています。

Webサービスの応答がアプリケーションのレイヤー間で転送される場合は、クラスを使用します。その使用範囲が十分に小さい場合、NSDictionaryが受け入れられるかもしれません。

3
追加された
データモデルを明確に指定することで、将来のバージョンのサービスとの互換性がほとんど保証されます。
追加された 著者 Seva Alekseyev,
右。それはまさにOPが将来プロトコルを将来的に保証しない可能性が高い理由であり、将来突然起こると...おっと!質問文の中の「シンプルな」は何かのプレゼントです。
追加された 著者 Seva Alekseyev,
@SevaAlekseyev、 "シンプル"、これは真と偽です。私は実際に1つまたは2つのプロパティを持つ単純な応答で始まっていますが、位置データと3番目の応答のような複雑な化合物があります。
追加された 著者 Vladimir,
@Sevaバージョン管理と互換性は、OPが尋ねている範囲外の問題を扱うのは難しい問題であり、まずはサービスを設計するときに対処する必要があります。正確にWSクライアントがレスポンスを非整列化する構造体は、互換性を確立したり破棄したりしません。 (どのように非マーシャル化するのか、無関係な値がどのように処理されるのか、どのくらい正確にレスポンスを使用するのかなどとは逆です)
追加された 著者 millimoose,
@Sevaまた、OPがサービスを管理していると仮定しています。これは、この1つのクライアントへのフィードを目的としているだけで、幅広い消費用に設計された公開済みWeb APIよりも未然防止の必要はありません。
追加された 著者 millimoose,
ObjCディクショナリを使用してJSONを保存する際の主な問題は、JSONを設定して取得するために必要な鈍い構文です。 ObjCのような動的言語は、動的DDLのより洗練された処理を求めています。
追加された 著者 Perception,

Objective-Cクラスは重くなく、サブクラス化はパフォーマンス上の問題ではありません。あなたは、抽象クラスを作成し、そこにベースフィールドを置くことができます。その後、フィールドを追加するために必要に応じてサブクラス化し、継承しながら継承します。

ニーズに応じて、jsonをNSArray/NSDictionaryに構文解析するだけで正常に動作します。 valueForKeyPath:を使用すると、パスを歩き、ルートコレクションから特定の値を取得できます。このソリューションは、重い構成を使用する複雑なコレクションでは洗練されています。パスキーを作成するには、 #define または const を使用して、変更が容易になり、キーのコンパイル時の検証ができるようになります。

http://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Protocols/NSKeyValueCoding_Protocol/Reference/Reference.html#//apple_ref/occ/instm/NSObject/valueForKeyPath:

3
追加された
JavaScript - 日本のコミュニティ
JavaScript - 日本のコミュニティ
2 参加者の

日本人コミュニティのjavascript