Пакеты Symfony2: я использую их правильно?
У меня есть приложение, которое разработано в Symfony2. Теперь структура для него такова:
- FrontBundle - включает все, что связано с представлением приложения и пользовательским интерфейсом.
- PersistanceBundle - включает все, что связано с уровнем сохранения приложения.
- DomainBundle - включает все, что связано с объектами приложения и сервисами.
Является ли эта структура нормально? Или пучки используются как функция форума - ForumBundle, которая включает в себя все уровни (контроллеры, службы, логику домена и постоянство), связанные с форумом.
Ответы
Ответ 1
Нет жестких и быстрых правил о том, как структурировать ваше приложение с помощью пакетов, но вот что я пришел после разработки на Symfony2 почти год.
Используйте один конкретный пакет приложений.. Сначала я начал с несколькими пучками, такими как CommonBundle
, UserBundle
, MainBundle
, BlogBundle
, ContactBundle
и т.д. В конце концов это оказалось не очень удобным, поэтому я переключился на один конкретный пакет приложений - AppBundle
.
Вы можете упорядочить свой код аккуратно, используя подзоны. Например, бэкэнд-контроллеры перейдут в пространство подкатегорий AppBundle\Controller\Backend
.
Обратите внимание, что я говорю об одном конкретном наборе приложений - о том, что уникально для конкретного приложения, и не имеет смысла повторное использование в другом месте. Вы все же можете развернуть отдельные пакеты для многоразового использования и поместить их в инфраструктуру поставщиков.
Хранить не связанные с Symfony вещи из пакетов. Нет необходимости иметь комплект для модели и Уровень обслуживания в комплекте, если они не являются специфичными для Symfony2. См. этот вопрос и мой ответ для более подробной информации.
Ответ 2
Как сказал Эльнур, использовать один AppBundle - хорошая практика.
Один пучок реализует сам шаблон MVC, поэтому я считаю, что не рекомендуется использовать пакеты для разделения ваших слоев.
Я думаю, что лучший способ использовать пакеты - думать "с открытым исходным кодом". Если создаваемая вами функция достаточно универсальна для публикации или для повторного использования в будущем проекте, поместите эту функцию в комплект.
Этот способ заставит вас создать функцию без какого-либо бизнес-правила, которое принадлежит вашему AppBundle.
Связки - это кирпичи
Ответ 3
Существуют различные способы организации структуры приложений для ваших проектов. Но если вы хотите распространять свои пакеты и следовать лучшим практикам Symfony, то пакеты больше возможностей, чем разделение пользовательского интерфейса. Подробнее о пакетах читайте в документации.
У меня есть два проекта со следующими структурами: оба действительны:
- создание пакета для каждой функции: BlogBundle, StoreBundle и так далее,
и AppBundle, который содержит общие вещи. Нет Backend/Frontend
разделение. Это SaaS, где backend является интерфейсом в большинстве случаев.
- Один пакет для интерфейса, один для бэкэнд. Они делят только сущности
и предмет, специфичный для домена. Приложение имеет два разных конца.