1

シングルトンの使用に関する賛否両論について読んだことがあります。シングルトンを使用すべきかどうかわからないシナリオがあります。私はあなたたちに相談すると思った。シングルトンを使用すべきですか - サーバーとのHttp接続 - iPhoneのアプリケーションデザイン

ログインしているユーザーに関するサーバー(HTTP)情報と一度に通信する必要のあるiPhoneアプリケーションを作成しています。 このWebサービスは、アプリケーションのさまざまな部分から呼び出されています。 - HTTP設定を担当し、URL、ヘッダ、パラメータおよびその他

2.classesサーバーとの通信を担当

  1. :私は実際に必要なもの

    は、クラスの2種類ですexponale UpdateUserInfo ClassまたはSendResultsクラスのWebサービスAPIの各タイプに対応します。このc

    2番目のクラスは1番目を使用し、すべてのアプリケーションで2番目のクラスに多くの呼び出しが必要になります。

    いずれにもシングルトンを使用すべきですか?それを設計する最良の方法は何ですか?

    ありがとうございました!

    編集:第一クラスの

    例(のはDataDownloaderそれを呼びましょう)メソッドは次のようになります。

    (NSData *) downloadDataWithRequest:(NSURLRequest *) 
    { 
        ASIHTTPRequest *dlRequest = [[ASIHTTPRequest alloc] initWithURL:[request URL]]; 
        [dlRequest setTimeOutSeconds:20];  
    
        if(retryNum < 1) 
         retryNum = 1; 
        [dlRequest setNumberOfTimesToRetryOnTimeout:retryNum]; 
    
         // and more of the same 
    } 
    

    ASIHTTPRequestたちはHTTPラッパーとして使用しているものです。

    サーバーのHTTPリクエストを送信するたびにこの一連の関数を呼びたくないので、そのオプションを専用のクラスに入れて新しいインスタンスを作成するか、またはsingletion 。私は例のために何ができるか

    そのような何かを使用している:PARAM情報を使用してNSURLRequestを設定し、今

    [[DataDownloader sharedInstance] downloadDataWithRequest:InfoUrlRequest] 
    

    を呼び出し、想定して実装することができ

    [[UpdateUserInfo sharedInstance] updateInfo:info] 
    

    httpリクエストは非同期ですが、私はまだ複数のセッションを同時に起動できます。

    今はっきりしていることを願っています。 これを設計する最良の方法は何と思いますか?

答えて

1

シングルトンパターンは、解決しようとしている問題の有用な解決策ではありません。これは実際には単なる/有限のリソースへのアクセスを制御するテクニックとして設計されていますが、これは意味をなさないものです。

たとえば、ユーザーが同時に2つのネットワーク関連の活動を実行することを許可しない理由はありますか?

ちなみに興味のある方はNSURLConnectionのようなココアのクラスを見ましたか?想像しているようにサーバー通信を管理するために、より低いレベルのクラスが必要なのかどうかはわかりません。このクラスで十分です。(あなたが達成しようとしていることについてもっと知らずに伝えなければならなかった)

+0

私の編集を参照してください。ありがとう – Idan

0

ASIHTTPRequestも忘れないでください。これは、フル機能のネットワークライブラリ

http://allseeing-i.com/ASIHTTPRequest/ I通常

+0

私は確かにそれを使用します。私の編集を参照してください。設計上の問題は依然として有効です。 – Idan

0

だ(それは個人の好みだ)ネットワーク管理(1でシングルトンとファサードパターン)を制御する必要があり1つのシングルトン5許可されている接続よりも多くを持っていないためのよう。あなたにも可能です。それはあなたの仕事の1つのためのシングルトンになります。
しかし、BobCは既に指摘しているように、ASIHTTPRequestは必要なすべてを行う必要があります。
ホイールを改造しないでください!

+0

私の編集を参照してください。ありがとう – Idan

0

私はシングルトンパターンを使用して、ASIHTTPRequestを使用するWebベースのAPIへのアクセスを制御しています。これは非常にうまく動作します。 ASIでは非同期要求に対してNSOperationQueuesを使用しているため、要求が互いに矛盾することを心配する必要はありません。

リクエストが返される順序がわからないため、公開APIメソッドがuserInfoディクショナリを提供することを許可することがあります。そのため、コールバックには起動時にコンテキストがあるためです。

0

サービスロケータパターンを使用して、アプリケーションに必要な各サービスを取得します。サービスロケータを作成するには、いくつかの方法があります。私は実行時の設定よりも初期化時の設定を好みます。

http://en.wikipedia.org/wiki/Service_locator_pattern

関連する問題