Дек 09 2008

Выносите максимум логики в модели

Раздел: МоделиМета @ 08:36

Просмотрите код ваших контроллеров. Если часто встречаются конструкции типа

$this->Product->recursive = -1;
$hits = $this->Product->find('all',array('conditions'=>'Product.image <> "no_image"','order'=>'Product.hit DESC, Product.added DESC','limit'=>9));

то задумайтесь — а место ли им в контроллере?

В чем идея модели? Предоставлять интерфейс к данным. Т.е. Модель должна вернуть уже готовые к отображению данные, в контроллере — только связь с внешним видом. Весь выше приведенный код стоило бы заменить методом в модели, например getHits($num). Тогда вызов в контроллере упростился бы до:

$hits = $this->Product->getHits(9);

Логично?

Этот принцип называется «толстые модели, худые контроллеры», он рекомендует переносить максимально возможную часть логики (естественно, логики поиска данных) приложения в модель.

Теги: , ,

3 Responses to “Выносите максимум логики в модели”

  1. xain says:

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

  2. xain says:

    и предлагаю вам в название добавить версию CakePHP, а то так как версия не указана, у меня не работали примеры на 1.1 и думаю у других могут возникнуть такие сложности, или размещать версию непосредственно возле кода.

  3. Мета says:

    Пожалуйста! :)

    Наша студия уже давно полностью перешла на ветку 1.2, поэтому все примеры приводятся для нее.
    В некоторых постах я указываю версию кейка, но в заголовке блога не хотел - платформа часто обновляется даже внутри одной ветки, поэтому примеры быстро устаревают.
    Если что-то интересует - спрашивайте в комментах, напишу отдельной заметкой.

Напиши комментарий!