web-dev-qa-db-ja.com

APIマネージャーにシングルトンパターンを使用することは良い考えですか?

したがって、基本的に私はREST APIをObjective-Cで使用するラッパーを作成しているので、お客様はiOS開発でそれらを簡単に使用できます。

私はこの目的に適したデザインパターンを見つけようとしています。シングルトンデザインパターンがここでの唯一の選択肢のようです。パブリック初期化子がなければ、それは関数を呼び出すことによってアクセス可能な共有マネージャーであり、したがって、アプリ内のすべてのコントローラーがそれにアクセスできます。

私はそのような目的のためにいくつかのアドバイスを求めています:APIのラッパーを設計することです。シングルトンデザインパターンを使用する必要がありますか?または、このクラスを継承して、自分の責任で作成できるようにする必要がありますか?

4
Frank Joe

一般に、アドバイスは、グローバル変数を実装するためにシングルトンパターンを使用しないことです。

ただし、ここでの目的は、「グローバル変数を実装する」ことです。これにより、顧客にとって「簡単にする」ことができます。

グローバル変数を使用すると、何かを簡単に立ち上げて実行できるようになります。あなたの顧客があなたのAPIのためのクライアントを書くのに助けを必要とするならば、多分それはまさに彼らが望んで必要とする一種の助けです。

ただし、両方を実行し、必要に応じてクライアントをインスタンス化できるようにします[〜#〜] and [〜#〜]初心者向けのシングルトンラッパークラスを提供します。

これは、シングルトンが防ぐことを実行したい他のより高度な顧客をカバーしますが、「私の最初のアプリ」の顧客のための簡単な「動作させる」最小限のコードチュートリアルも提供します

3
Ewan

このアプローチはお勧めしません。それを行う代わりに、APIに対して行うことができる各種の要求に対するクラスメソッドを含むURLRequestに拡張を作成することをお勧めします。これらのメソッドは、適切に構築されたURLRequestを返す必要があります。

ライブラリのユーザーがリクエストを作成したい場合は、URLRequestを作成し、それをURLSession、AFNetworking、または使用/作成することを選択したその他のネットワークライブラリに渡すことができます。

はるかに柔軟で、構成可能で、テスト可能です。

1
Daniel T.