0

私のアプリで非常に小さなWebサービスを大量に使用していますが、拡張性や期待どおりに機能しないいくつかの道を進んできました。

考えている設計アプローチ:viewControllerのタスクは、一般的なwebServicesClassからデータのセットを要求することです。このタスクは、新しいNSThreadで開始されます->これにより、xmlを取得するだけのオブジェクトがインスタンス化され、 webServicesClass-> webServicesClassは、この特定のWebサービスからのXMLを解析できるオブジェクトをインスタンス化するようになりました。次に、パーサーは適切なEntityオブジェクトをwebServiceClassに返します。WebserviceClassは、このデータについてviewControllerに通知する必要があります。

viewControllerは、webServiceClassDelegateといくつかのデリゲートメソッドを実装して、Webサービスリクエストが計画どおりに行われたかどうかを確認します。例:-(void)aWebserviceFailedおよび-(void)aWebserviceSuccess。

0.5実行中のWebserviceClassは別のNSThreadであるため、親オブジェクトのメインNSThreadでデリゲートメソッドを呼び出すのに問題がありますか?

1.0この設計は、さまざまなクラスのエンティティの取得、解析、および戻りを完全にカプセル化していないため、適切だと思います。ただし、さまざまなWebサービスごとに、委任メソッドを作成し、途中の各ステップで委任プロトコルを実装する必要があります。つまり、下から始めて、WebserviceClassは、XMLを取得するオブジェクト(start、fail、success)の両方に対して委任メソッドを実装する必要があり、次にXMLを解析するオブジェクト(start、fail、success)とWebserviceClassが実行できる必要があります。これらの各応答をviewControllerに委任します。このビューコントローラーは、WebserviceClassからの委任メソッド(start、fail、success)を再度実装する必要があります。これを行うためのはるかに簡単な方法はありますか?

私はデザインパターンの経験がありますが、Objective Cほど一貫して委任を使用する言語からではありません。AS3またはJavaでは、オブジェクトを介してバブルし、変更について聞いている人に通知するイベントが発生します。私が読んだすべてのObjectiveサンプルコードでは、NSNotifications(AS3またはJavaの「イベント」に相当)が0.1%の頻度で使用されているのを見ただけです。

私が説明したデザインは、多くのWebサービスに完全に対応し、潜在的なエラー/例外が発生する場所を完全に制御できるものを提供しますが、この緩い結合を取得するには多くのコードがあるようです。

1.1または、委任アプローチを完全に受け入れて作業を開始する必要があります:)

ポインタやヘルプを提供していただきありがとうございます。ソースコードなどを求めているのではなく、「これは、今説明した日常の状況でのObjectiveCのベストプラクティスと見なされます」:)

4

1 に答える 1

1

(ここASIHttpRequestで入手可能)と+ (ここのドキュメント)をご覧になることをお勧めします。常に接続が絶対に必要な場合を除いて、Webサービスと常に通信するために長寿命のスレッドを実行する必要はないと思います。NSOperationNSOperationQueue

基本的に、ASIHttpRequestとNSOperationは両方とも、すべてのネットワーキングとスレッド化をカプセル化します。操作により、iPhoneでのマルチスレッド化は非常に優れています。基本的に、(使いやすさのために、ファクトリなどを介して)操作を作成し、それをキューに入れて、結果を処理します。

結果をどうするか(これは元のシナリオにも当てはまり、0.5と1.1didSucceedAtGettingWhateverにも当てはまります)、通常は、操作/スレッドがordidFailWithError:(NSError*)メソッドを呼び出します。委任は、電話でリクエストを行うための事実上の方法です。複数のデリゲートがある場合は、Javaの場合と同様に、subject-observerを使用できます。

1.0に関しては、最終的にはありません。私たちが通常行うことは、OperationDelegateとOperationTypesがあることです。どのOperationTypeが成功または完了したかに基づいて、異なるロジックがあります。これは最高ではなく、これを行うにはさまざまな方法がありますが、何をするかに関係なく、個別のイベントに対して個別のロジックを用意する必要があります。それが1つの方法にあるのか、それとも多くの方法にあるのかはあなた次第です。

于 2009-12-07T14:44:47.890 に答える