Списки выдергивать из БД всегда лучше с DAO. С ActiveRedord мы получаем массив достаточно объемных объектов AR из которых нужно взять только атрибуты. В результате неоправданная потяря производительности
Это позволяет активно использовать relations и остальные вкусности AR. А потом я делаю перегрузку метода findAll, чтобы он возвращал не объекты, а массивы. Пока в таком подходе не разочаровался и нахожу его очень удобным.
public function findAll($condition = '', $params = array())
{
$criteria = $this->getDbCriteria();
if ($condition)
$criteria->mergeWith(array(
'condition' => $condition,
'params' => $params));
$this->_c=null;
return $this->getCommandBuilder()->createFindCommand($this->getTableSchema(), $criteria)->queryAll();
}
В результате небольшая, но 200% оправданная потеря производительности. Похоже вы не понимаете для чего на самом деле используется ActiveRecord, даже в случае получения данных. Используете DAO - теряете гибкость, масштабируемость и переносимость кода, что вообщем то уже катастрофа. К тому же обычно получаемые списки "пагинируются", таким образом получается очень немного объектов. Далее, используете DAO, забываете автоматически про все вкусности вроде CHtml::active*. ИМХО для себя давно решил DAO - это случай крайнейшей необходимости, который в 99% случаев не требуется. К тому же ковыряние в DAO с целью наращивания функционала стоит намного дороже по $ и по времени, чем upgrade сервера или переход на более мошный тарифный план на вирт. хостинге. Это тоже нужно учитывать.
P.S. Паттерн ActiveRecord - это не UML, используется не для моделирования, а для постоянного промышленного использования.