Повторное использование кода

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
Аватара пользователя
Одиночка Айс
Сообщения: 267
Зарегистрирован: 2010.02.05, 10:26
Откуда: Алма-Ата, Казахстан
Контактная информация:

Повторное использование кода

Сообщение Одиночка Айс »

Итак, у нас есть функция, которая делает выборку из БД, затем прерывает foreach для проверки данных, затем опять возобновляет выборку. Ну так, вот, при выборке используется один и тот же код, то есть в функции он дублируется (довольно-таки увесистый). А теперь вопрос: как использовать один и тот же код внутри функции? Писать в ней другую?
Ни любви, ни тоски, ни жалости...
Аватара пользователя
timlar
Сообщения: 1382
Зарегистрирован: 2009.09.19, 17:49
Откуда: Украина, Днепропетровск
Контактная информация:

Re: Повторное использование кода

Сообщение timlar »

Обычная рекурсия. Т.е. вызов функции из самой себя по определенному условию, чтобы не получился замкнутый цикл. В интернете довольно много простеньких примеров, чтобы понять принцип.
Twitter: @timlar_ua
pirrat
Сообщения: 193
Зарегистрирован: 2009.04.03, 09:41

Re: Повторное использование кода

Сообщение pirrat »

а вы фунцию покажите, а то как то не понятно, что и зачем у вас там прерывается, что за повторная выборка...
Аватара пользователя
Одиночка Айс
Сообщения: 267
Зарегистрирован: 2010.02.05, 10:26
Откуда: Алма-Ата, Казахстан
Контактная информация:

Re: Повторное использование кода

Сообщение Одиночка Айс »

Код менять муторно и долго. Поэтому постараюсь описать на пальцах:
1. Приходят постом данные;
2. Делаем выборку из БД а ля model()->findAll($criteria)
3. Если результат не пустой, выводим "шапку таблицы", если обратное - то ошибку;

Код: Выделить всё

if($tsr!=NULL){
echo $main_res;//это "шапка"
} else { echo $error; }
 
4. Далее, опять делаем выборку из БД, с таким же $criteria и выводим уже результаты поиска.
Ни любви, ни тоски, ни жалости...
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: Повторное использование кода

Сообщение Ekstazi »

а CGridView здесь не подходит ?
Аватара пользователя
Одиночка Айс
Сообщения: 267
Зарегистрирован: 2010.02.05, 10:26
Откуда: Алма-Ата, Казахстан
Контактная информация:

Re: Повторное использование кода

Сообщение Одиночка Айс »

Нет, это же не админка, где пофиг как данные выводятся, а ковыряться в файлах самого yii мне не в кайф, чтобы дизайн поменять.
Ни любви, ни тоски, ни жалости...
pirrat
Сообщения: 193
Зарегистрирован: 2009.04.03, 09:41

Re: Повторное использование кода

Сообщение pirrat »

ну во первых тут скорее всего можно обойтись одним запросом.
но в любом случае вынос запросов в отдельный слой (сервис-слой) является хорошей практикой.

так что, создаете класс сервис слоя, допустим NewsManager

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

Код: Выделить всё

public static function getNewsForMyPage($query, $sort)
{
$criteria = new CDbCriteria;
$criteria->addSearchCondition($query);
$criteria->order = $sort;
return News::model()->findAll($criteria);
}
 
а в нужных местах вызываешь метод:

Код: Выделить всё

$news=NewsManager::getNewsForMyPage($_POST['query'], $_POST['sort']); 
Ответить