Пакеты Symfony2: я использую их правильно?

У меня есть приложение, которое разработано в Symfony2 . Теперь структура для него такова:

  • FrontBundle – включает все, что связано с представлением приложения и пользовательским интерфейсом.
  • PersistanceBundle – включает все, что связано с уровнем сохранения приложения.
  • DomainBundle – включает все, что связано с объектами приложения и сервисами.

Является ли эта структура нормально? Или связки используются как функция форума – ForumBundle – который включает в себя все уровни ( контроллеры , службы , логику домена и постоянство ), связанные с форумом.

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

Используйте один пакет приложений. Сначала я начал с нескольких пакетов, таких как CommonBundle , UserBundle , MainBundle , BlogBundle , ContactBundle и т. Д. В конце концов это оказалось не очень удобным, поэтому я перешел на один пакет приложений – AppBundle .

Вы можете упорядочить свой код аккуратно, используя подзоны. Например, бэкэнд-контроллеры перейдут в AppBundle\Controller\Backend .

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

Не храните специальные материалы Symfony из пучков. Нет необходимости иметь набор для модели и классов Service Layer в пакете, если они не являются специфичными для Symfony2. См. Этот вопрос и мой ответ для получения дополнительной информации.

Как сказал Эльнур, использовать один AppBundle – хорошая практика.

Один пучок реализует сам шаблон MVC, поэтому я считаю, что не рекомендуется использовать пакеты для разделения ваших слоев.

Я думаю, что лучший способ использовать пакеты – думать «с открытым исходным кодом». Если создаваемая вами функция достаточно универсальна для публикации или для повторного использования в будущем проекте, поместите эту функцию в комплект. Этот способ заставит вас создавать функцию без какого-либо бизнес-правила, которое принадлежит вашему AppBundle.

Связки – это кирпичи

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

У меня есть два проекта со следующими структурами: оба действительны:

  1. создавая пакет для каждой функции: BlogBundle, StoreBundle и т. д., и AppBundle, который содержит общие вещи. Нет разделения бэкэнд / фронтэнда. Это SaaS, где бэкэнд является интерфейсом в большинстве случаев.
  2. Один комплект для интерфейса, один для бэкэнда. Они делят только сущности и специфические для домена. Приложение имеет два разных конца.