2012-07-12 2 views
6

この質問はJavaScriptの観点から来ていますが、他の言語にも当てはまる可能性があります。複数のメソッド、複数のパラメータ、またはオプションのパラメータを使用する場合

私は最近、これに慣れ親しんでいて、あなたのメソッドを構築する方法について、ベストプラクティスか、少なくとも良いデザイン標準があるかどうか疑問に思っていました。

Iは各

  • 複数の方法のための簡単な例とともに、次のようにしている参照して明らかオプション:

    this.makeGetRequest = function(controller){...} 
    this.makeSynchronousGetRequest = function(controller){...} 
    this.makePostRequest = function(controller, data){...} 
    
  • 一つの方法、複数のパラメータを有する:

    //data would be an optional parameter 
    // this.makeRequest("friends", "GET", true); 
    // this.makeRequest("friends", "POST", false, newFriend); 
    this.makeRequest = function(controller, type, isSynchronous, data){...} 
    
  • 1つの方法で、オプションパラメータ:

    this.makeRequest = function(controller, type, options); 
    this.makeRequest("friends", "POST", {data:newFriend, isSync:false}); 
    

HTTPリクエストの例は、単に質問の動機が、これは、カスタマイズ/変数の様々な量で任意のパブリック面する機能のために動作します。

3つの機能は明らかに機能的です。しかし、良い練習は何ですか?それに続く傾向のある基準や指針がありますか?

答えて

2

パラメータoptionsの利点は、明確さを犠牲にすることなく無制限のオプションを可能にすることです。誰かがdata:またはisSync:と指定した場合、どの設定が入力されているのかははっきりしています。関数の13番目のパラメータをfalseに設定することを覚えておくのは混乱のレシピです。

したがって、最後の2つのオプションの間では、(1)合計で4つ未満のパラメータがある場合、(2)シーケンスが論理的で覚えやすい場合(URLを入力してからデータ)、(3)複数のもの(最後のもの)はオプションではありません。とにかく、これは大雑把なルールです。

複数のメソッドとパラメータ化はどうですか?複数のメソッドは、可能性が少ない(GETとPOST、UseDefaultsとDontUseDefaultsのいずれかなど)ときはじめてのオプションです。それについて考え、私はときにのみ設定別の方法にありそうだ:

  1. 区別は非常に重要である(同期要求が非同期リクエストとは根本的に異なる動作し、私は開発者が意識的に適用するためにどの選択します(。対照的に、GETとPOSTはあなたの要求のもう一つの特性ですが、間違ったことがあれば、最終決定ではありません。)

  2. 他にもたくさんのオプションがありますとにかく設定します。最初にfoo.get()またはfoo.post()を呼び出すかどうかを覚えなければならない場合会員はoptionsオブジェクトを入力してくださいとにかく、私はあなたに2つの異なる場所で意思決定をさせるだけです。私はむしろすべての設定を1か所で持っています。

1

明らかに複数のメソッドあなたは、彼らが呼ぶだろう何らかの抽象的なスーパーメソッドを持っている必要があります。そうでなければ、あなた自身を繰り返します。これは悪いと考えられますが、時にはエイリアスや速記(修正$.ajax() -CallためつまりjQueryの$.getJSON()を参照してください)あなたはspechialケースまたはオプションのパラメータの多くを持っている場合、そのようなあなたが使用したいのためのより多くのパラメータと

一つの方法は、本当に柔軟ではありませんあなたの3番目の例で言及したようにoptionsオブジェクト。

実際には、ユースケースと必要な柔軟性/再利用性が低下します。 個人的に私はいつもと一緒に行くでしょう。一つの方法で、オプションパラメータのアプローチです。

1

どのように最大の柔軟性のためのJSONのオプションで「supermethod」を有する、そして多分より厳密に定義されたパラメータを持ついくつかのラッパー・メソッドは、最も一般的に使用される機能に簡単にアクセスを持っている程度。

関連する問題