php - быстрый рефакторинг - PullRequest
0 голосов
/ 25 марта 2011

У меня есть 2 метода, которые в значительной степени совпадают, и я бы хотел, чтобы кто-то помог мне реорганизовать их:

public static function searchFromVideoRequest($word, $returnPropelObjects = false)
{
    $c = new Criteria();
    $c->addJoin(YoutubeVideoPeer::ID,ItemPeer::YOUTUBE_VIDEO_ID);
    $c->addSelectColumn(self::TITLE);
    $c->addSelectColumn(self::ID);
    $c->add(ItemPeer::TITLE, '%'.$word.'%', Criteria::LIKE);
    $c->addAnd(self::YOUTUBE_VIDEO_ID, null, Criteria::ISNOTNULL);
$c->addAscendingOrderByColumn(self::TITLE);
   if ($returnPropelObjects)
          return self::doSelect($c);

        $stmt = self::doSelectStmt($c);
        $results = array();
        while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
          $results[] = $row;
        }
        return $results;
}

public static function searchFromFlickrRequest($word, $returnPropelObjects = false)
{
    $c = new Criteria();
    $c->addJoin(FlickrPhotoPeer::ID,ItemPeer::FLICKR_PHOTO_ID);
    $c->addSelectColumn(self::TITLE);
    $c->addSelectColumn(self::ID);
    $c->add(ItemPeer::TITLE, '%'.$word.'%', Criteria::LIKE);
    $c->addAnd(self::FLICKR_PHOTO_ID, null, Criteria::ISNOTNULL);
    $c->addAscendingOrderByColumn(self::TITLE);
   if ($returnPropelObjects)
          return self::doSelect($c);

        $stmt = self::doSelectStmt($c);
        $results = array();
        while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
          $results[] = $row;
        }
        return $results;
}

Спасибо

1 Ответ

1 голос
/ 25 марта 2011

Для рефакторинга таких методов вы можете разделить их на несколько методов, которые будут содержать общий код и делать их закрытыми, чтобы никто не мог использовать их вне класса:

public static function searchFromVideoRequest($word, $returnPropelObjects = false)
{
    $c = self::buildSearchCriteria($word);
    $c->addJoin(YoutubeVideoPeer::ID,ItemPeer::YOUTUBE_VIDEO_ID);
    $c->addAnd(self::YOUTUBE_VIDEO_ID, null, Criteria::ISNOTNULL);
    return self::getSearchResult($c, $returnPropelObjects);
}

public static function searchFromFlickrRequest($word, $returnPropelObjects = false)
{
    $c = self::buildSearchCriteria($word);
    $c->addJoin(FlickrPhotoPeer::ID,ItemPeer::FLICKR_PHOTO_ID);
    $c->addAnd(self::FLICKR_PHOTO_ID, null, Criteria::ISNOTNULL);
    return self::getSearchResult($c, $returnPropelObjects);
}

private static function buildSearchCriteria($word)
{
    $c = new Criteria();
    $c->addSelectColumn(self::TITLE);
    $c->addSelectColumn(self::ID);
    $c->add(ItemPeer::TITLE, '%'.$word.'%', Criteria::LIKE);
    $c->addAscendingOrderByColumn(self::TITLE);
    return $c;
}

private static function getSearchResult($c, $returnPropelObjects)
{
    if ($returnPropelObjects)
      return self::doSelect($c);

    $stmt = self::doSelectStmt($c);
    $results = array();
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
      $results[] = $row;
    }
    return $results;
}

PS: И я думаю, что вопрос в порядке.

...