2013-05-20 71 views
0

我重構一個簡單的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。

問題:

  1. 從重構的角度來看,是有什麼錯我的代碼?
  2. 我應該將三個函數組合成一個函數嗎?
+1

您應該所有的功能組合成一個僅僅是因爲代碼重用 - 可用性是OOPS –

+1

的主要功能爲什麼在將字符串傳遞給Twitter方法之前將字符串賦值給變量?爲什麼你的方法是私人的? – webbiedave

+0

+1謝謝你的回覆。我將字符串分配給變量,因爲我認爲它會更容易理解返回的行(返回$ twitter-> setGetfield($ getfield) - > buildOauth($ url,$ requestMethod) - > performRequest(); – Anthony

回答

1

我會重構是這樣的:

private function get_favorites_list($username, $twitter, $path) 
    {   
     $path = sanitize($path); 
     $getfield = '?screen_name=' . $username; 
     $url = 'https://api.twitter.com/1.1/' . $path;  
     $requestMethod = 'GET';  
     return $twitter->setGetfield($getfield) 
         ->buildOauth($url, $requestMethod) 
         ->performRequest();  
    } 

我會建議消毒$path,這樣你就不會允許任何漏洞蠕變

+0

+1哇,這是一個簡單的重構,甚至可以允許我使用一個函數而不是3,也可以通過改變函數名稱。很酷,謝謝 – Anthony

+1

@Anthony的確如果你發現函數之間的共同性,你可以隨時做到這一點 – Woot4Moo

+0

+ 1感謝您關於清理$ path的建議 – Anthony