2013-05-20 45 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