2011-10-18 23 views
3

相手の間のゲームを追跡するために使用される「ゲーム」クラスを想像してください。ユーザー入力パラメータに基づいてゲームを取得する1つの方法を持つ方がよいか、検索の目標に固有の複数のメソッドを持つ方がよいでしょうか?複数のパラメータを持つ1つのメソッドまたは1つのパラメータを持つ複数のメソッド?

class Games { 
    function get_games($game_id = NULL, $stadium_id = NULL, $start_date = NULL, 
     $end_date = NULL, $count = 999); {} 
} 

VS

class Games { 
    function get_all_games($count = 999); {} 
    function get_game_by_id($game_id = 1); {} 
    function get_games_by_stadium($stadium_id = 1); {} 
    function get_games_by_dates($start_date = NULL; $end_date = NULL) {} 
} 

利益と任意の符号化/ snytaxのヒントの説明をいただければ幸いです。ありがとう。

答えて

2

私がOIを練習すればするほど、メソッドにパラメータを渡すことについてのルールに従います。何種類かのネストされたifステートメントのようなもの、私は2つ以上のものがあると、私は何か間違ったことをしているかもしれません。

コードをシンプルにしてください。あなたは何かをするメソッドを書いています。すべてを行う手続き型コードのブロックではありません。あなたがゲームをしたい場合は、ゲームを取得します。日付範囲のリストを取得する場合は、それを行います。

しかし、私はあなたが本当にget_all_games()を必要としないことを指摘します - パラメータなしでget_games_by_dates()を渡すことができます。それが何も得られなければ、それは永遠(すべてのゲーム)以来、毎日のためのゲームを得るでしょう

1

私はいつもOOPコードの面で誤りがあります。これは、コードを保守して読みやすくするためです。より多くの関数を使うと、後でコードを実行するのが簡単になります

0

デフォルト値で多くのパラメータを使用しているので、別の方法を使用します。あなたはすべてのゲームを取得したい場合は

あなたがしなければならないでしょう:

$games->get_games(NULL, NULL, NULL, NULL, 999); 
0

をごget_....()の機能は、すべてのゲームデータを戻ってきていると仮定すると、私はIDに基づいて、このデータを返すために、単一の関数を記述します渡され、一連のfind_...()関数を書いて、見つかったIDの配列を返します。これにより、デシェントクラスのデータ取得コードを簡単に上書きできるという利点があります。

class Games { 
    public function get_game($game_id) { 
     // Return game details (array/object) for $game_id, or FALSE if not found. 
    } 

    public function find_all_games() { 
     // Return array of ids for all games. 
    } 

    public function find_games_by_dates($start_date = NULL, $end_date = NULL) { 
     // Return array of ids between $start_date and $end_date unless NULL. 
    } 
} 

あなたはその後、呼び出すことができます。

$oGames = new Games() ; 
$aGames = $oGames->find_all_games() ; 
foreach($aGames as $id) { 
    $aGame = $oGames->get_game($id) ; 
    if($aGame !== FALSE) { // This check might be skipped if you trust the array of ids from find_all_games(). 
     // Assuming an array is returned. 
     echo "Game Found: ".$aGame['name']."\n" ; 
    } 
} 
0

「検索目標に特有の複数の方法」の利点は、あなたが目標を追加/削除することができるということです。 1つのモノリシック関数を複数のパラメータとともに使用する場合の問題は、ゲームを追加/削除する場合は、インターフェイスを変更する必要があるということです。それはそれを使用するコードを破るでしょう。

各メソッドは、可能な限り簡潔で、1つの機能のみを実行する必要があります。

関連する問題