Специфические функции в Symfony2

В моем проекте Symfony2 у меня есть ModelBundle, который содержит мои сущности и другие пакеты для внешнего интерфейса, бэкэнда и т. Д., Которые используют этот ModelBundle.

У меня есть пара специфичных для модели функций, которые выполняют некоторые специфичные для сущности задачи. Куда мне их положить?

  1. Должен ли я создать отдельную папку "модель" рядом с моей папкой Entity и поместить туда все эти функции?
  2. Создать ли в моем ModelBundle контроллер, содержащий эти функции как действия? Это может быть странно, так как контроллеры, на мой взгляд, принимают HTTP-запросы и возвращают HTTP-ответ, поэтому он не применим в этом контексте.
  3. Я помещаю их в сами классы сущностей? Это приятно? И есть ли вероятность, что они будут перезаписаны, когда я заново сгенерирую свой ORM?
  4. Я ищу нестандартные репозитории? Я могу сделать их и положить в папку "модель" или что-то в этом роде. http://www.doctrine-project.org/docs/orm/2.0/en/reference/working-with-objects.html

PS: я люблю Symfony2, но я буду очень счастлив, когда у каждого будет определенный набор лучших практик для фреймворка:-)

1 ответ

Решение

Было бы полезно узнать, какой тип специфичных для модели функций вы планируете написать.

Если функциональность предназначена для сущности, которую вы уже извлекли из базы данных, она относится к классу сущностей.

Если функциональность связана с поиском сущности или группы сущностей на основе определенных критериев, она относится к пользовательскому классу хранилища.

Я не фанат думать, что классы моделей и классы сущностей должны быть разными. ИМХО, это ненужный уровень абстракции.

Вы правы, считая, что эта функция не принадлежит контроллеру.

Если вы используете собственные репозитории, я предлагаю хранить их либо в папке "Entity", либо в папке "Repository". Я лично держу свое в "Entity", но это, вероятно, побочный эффект от использования Doctrine 1 так долго и привыкания к "Table" классам.

Я надеюсь, что это поможет, но если у вас есть какие-либо вопросы, пожалуйста, опубликуйте более подробную информацию о том, чего вы надеетесь достичь

Другие вопросы по тегам