Как избежать больших классов действий с Symfony 1.4

#php #model-view-controller #symfony1

#php #модель-представление-контроллер #symfony1

Вопрос:

в данный момент работаю над проектом и не чувствую, что код настолько хорошо структурирован / отделен / обслуживаем, как это должно быть.

Я думаю, что основная проблема заключается в использовании одного класса actions для выполнения основной работы моей системы. Но какие есть альтернативы? Мои другие модули довольно простые и отдельные.

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

Я читал http://www.slideshare.net/nperriault/30-symfony-best-practices в котором есть несколько хороших моментов, один из которых заключается в том, чтобы избегать наличия больших классов действий, но на самом деле не говорит вам, как это должно быть сделано.

Должен ли я разбить свой класс actions и разместить разные файлы в /apps / frontend /module / MyModule / lib /. ?

Проблема в том, что у меня есть другой класс actions, который должен повторно использовать некоторые функции из упомянутого выше класса… Я действительно не хочу иметь дублирующийся код, и я попадаю в небольшую неразбериху.

Несколько общих указаний было бы здорово, спасибо

Комментарии:

1. Почему бы вам не опубликовать свой класс действий здесь, чтобы мы могли дать несколько практических советов?

Ответ №1:

Вы можете либо сохранить все действия в одном файле, либо поместить каждое действие в отдельный файл.

Итак, либо

 class mymoduleActions extends sfActions
{
  public function executeIndex($request)
  {
    // ...
  }

  public function executeList($request)
  {
    // ...
  }
}
  

или

 class indexAction extends sfAction
{
  public function execute($request)
  {
    // ...
  }
}
  

plus

 class listAction extends sfAction
{
  public function execute($request)
  {
    // ...
  }
}
  

Все это в документации. Затем вы должны поместить повторно используемый код в родительский XYZAction класс, который могут расширять оба класса действий.

Ответ №2:

Вы всегда можете поместить код в apps/frontend/lib . Создавайте классы с кодом, который можно использовать повторно, и вы можете просто вызывать методы из своих действий, чтобы избежать дублирования