我重構一個簡單的Twitter應用程序時,我注意到,似乎是三(3)主要的代碼在以下三個函數的形式氣味我寫道:重構3個功能
private function get_friend_list($username, $twitter)
{
$getfield = '?screen_name=' . $username;
$url = 'https://api.twitter.com/1.1/users/show.json';
$requestMethod = 'GET';
return $twitter->setGetfield($getfield)
->buildOauth($url, $requestMethod)
->performRequest();
}
private function get_user_timeline($username, $twitter)
{
$getfield = '?screen_name=' . $username;
$url = 'https://api.twitter.com/1.1/statuses/user_timeline.json';
$requestMethod = 'GET';
return $twitter->setGetfield($getfield)
->buildOauth($url, $requestMethod)
->performRequest();
}
private function get_favorites_list($username, $twitter)
{
$getfield = '?screen_name=' . $username;
$url = 'https://api.twitter.com/1.1/favorites/list.json';
$requestMethod = 'GET';
return $twitter->setGetfield($getfield)
->buildOauth($url, $requestMethod)
->performRequest();
}
這三個函數的每個返回關於Twitter用戶的不同信息。但是,他們違反DRY規則(不要重複自己),因爲每個函數幾乎完全相同,除了用於從Twitter API獲取特定信息的URL。
問題:
- 從重構的角度來看,是有什麼錯我的代碼?
- 我應該將三個函數組合成一個函數嗎?
您應該所有的功能組合成一個僅僅是因爲代碼重用 - 可用性是OOPS –
的主要功能爲什麼在將字符串傳遞給Twitter方法之前將字符串賦值給變量?爲什麼你的方法是私人的? – webbiedave
+1謝謝你的回覆。我將字符串分配給變量,因爲我認爲它會更容易理解返回的行(返回$ twitter-> setGetfield($ getfield) - > buildOauth($ url,$ requestMethod) - > performRequest(); – Anthony