2015-10-21 4 views
1

Я в настоящее время реорганизую часть своего кода и задаюсь вопросом, считается ли это хорошей практикой создание нового дочернего объекта в классе объекта.Создайте дочерний объект из модели

E.g. В настоящее время у меня есть турнир «Турнир» и контроллер для этого турнира. Если бы я пошел в/турнир/{id}/start, турнир начнется. В настоящее время я создаю все раунды для турнира в своем контроллере, но я пытаюсь отойти от толстого контроллера до толстой модели.

Хорошая практика иметь эту функцию в моей модели турнира?

public function start() { 

     for ($x; $x <= $this->amountOfRounds; $x++) { 
      $newRound = new Round($this, $x); 
      $this->addRound($newRound); 
     } 

    } 

(Примечание: довольно непроверенные коды в этом блоке, но вы получите точку)

Благодаря кучу!

+1

В отличие от того, что указал @VBee, ваш подход прекрасен. Имейте в виду, что «лучшая практика» - это фантазия. Все сводится к мнению. – Cerad

+0

@ Керад, ты прав, @ Неглексис, ты просишь за лучшую практику, я дал свой, но это не единственный. Я отредактирую свой пост – VBee

+0

@Cerad Спасибо, это то, что я искал. – Neglexis

ответ

1

подход я предлагаю вам, чтобы иметь менеджера, чтобы сделать бизнес-процесс:

class TournamentManager 
{ 
    public function start(TournamentInterface $tournament) 
    { 
     $tournament->addRound(new Round()); 
    } 
} 

interface TournamentInterface 
{ 
    function addRound(RoundInterface $round); 
} 

и использовать интерфейсы, насколько это возможно.

+0

Это первый раз, когда я упоминаю менеджеров и/или интерфейсов, поэтому я понятия не имею, с чего начать. Я не знаю, что их общая функция, как это никогда не упоминается в книге Symfony. – Neglexis

+0

Это лучшая практика PHP. Вы должны научиться использовать PHP перед symfony. http://www.phptherightway.com/#programming_paradigms – VBee

+0

Менеджер - это просто класс, который занимается бизнесом, например, начать турнир. Менеджер - это стандарт, но вы можете использовать все, что хотите. Я просто предлагаю вам отвлечь вашу бизнес-логику от вашего модельного слоя. – VBee

Смежные вопросы