一个方法有多个参数还是多个方法只有一个参数?

5
想象一下一个“游戏”类,用于跟踪对手之间的游戏。从面向对象编程的角度来看,是使用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) {}
}

希望您能解释一下其中的好处,还有任何编码/语法技巧都会很感激。谢谢。

5个回答

3
我练习面向对象编程时,我遵循一条有关方法传递参数的规则。就像有许多层嵌套if语句一样,如果我有两个以上的参数,那么我可能会做错什么。
保持你的代码简单。你正在编写一个执行某些操作的方法,而不是执行所有操作的过程式代码块。如果你想获得一个游戏,那么就获取一个游戏。如果你想获取一个日期范围的列表,那么就这样做。
但是我要指出,你并不真正需要get_all_games() - 你可以允许get_games_by_dates()不带参数传递。如果它没有参数,则会获取自从始祖以来的每个日期的游戏(所有游戏)。

1

我总是倾向于使用面向对象编程。原因在于它使你的代码更易于维护和阅读。你拥有的函数越多,以后跟踪代码就越容易。


1
“特定检索目标的多种方法”的好处在于您可以添加/删除目标。使用一个具有许多参数的单一大型函数的问题是,如果您决定添加/删除获取游戏的方式,您将不得不更改接口。这将会破坏任何使用它的代码。
每个方法应尽可能简洁,只执行一个功能。”

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" ;
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接