Пример рефакторинга «извлечение функции» при рендеринге заголовка страницы


Исходный код

elseif ( $manufacturer_id) {
    $db->query( "SELECT manufacturer_id, mf_name FROM #__{vm}_manufacturer WHERE manufacturer_id='$manufacturer_id'");
    $db->next_record();
    $mainframe->setPageTitle( $db->f("mf_name") );
    echo "Izdeliya ot";
}

Что не так в исходном коде

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

Как улучшить исходный код

elseif( $manufacturer_id) {
    $db->query( "SELECT manufacturer_id, mf_name FROM #__{vm}_manufacturer WHERE manufacturer_id='$manufacturer_id'");
    $db->next_record();
    $mainframe->setPageTitle( $db->f("mf_name") );
    echo "Izdeliya ot";
}

function mf_name($manufacturer_id) {
    $db = mf_find($manufacturer_id, 'mf_name');
    return $db->f('mf_name');
}

function mf_find($manufacturer_id, $select = '*') {
    $db->query("SELECT $select FROM #__{vm}_manufacturer WHERE manufacturer_id='$manufacturer_id'");
    $db->next_record();
    return $db;
}

Обычно принято поднимать из базы не по одному полю за запрос, а сразу все необходимые поля, которые могут понадобиться при рендеринге страницы, так как накладные расходы на каждый запрос к базе данных относительно высоки.

Теория