Как вы организуете свои пакеты в проектах Symfony2?
У меня есть точный вопрос, который есть у этого парня: http://groups.google.com/group/symfony2/browse_thread/thread/cd35132cc6972f29
Я просто скопирую это здесь:
Мне было интересно, какие разные способы организации пакетов в рамках проекта люди используют.
Я, кажется, в конечном итоге либо один массивный пакет для проекта или множество пакетов, которые тесно связаны друг с другом. например;
Я реализовал свою собственную сущность пользователя, формы входа в систему и т. Д., Но пользователи связаны с организацией (с некоторыми функциями). И т.д... Я думаю, что в основном это сущности, которые сильно перекрывают друг друга...
Ребята, вы разделяете их или складываете их в одну связку?
3 ответа
Редактировать: я больше не использую пакеты для кода приложения.
Лично я предпочитаю иметь пакет на раздел приложения. Например:
- UserBundle
- BlogBundle
- ForumBundle
- JobBundle
- StoreBundle
- так далее
Это нормально, если приложение представляет собой мешанину из нескольких функций, ни одна из которых не является достаточно большой, чтобы требовать отдельное приложение и / или поддомен. Но если бы я разрабатывал большое приложение интернет-магазина, мои пакеты были бы более конкретными:
- UserBundle
- ProductBundle
- CartBundle
- SearchBundle
- WishlistBundle
- так далее
Так что, я бы сказал, это зависит от направленности проекта. То, что просто раздел для одного проекта может быть основной функциональностью другого.
И у меня обычно есть CommonBundle, куда идут все общие вещи, такие как глобальный CSS, изображения, макеты и т. Д.
Также есть как минимум два варианта для бэкэнд-организации:
- каждый пакет имеет свой собственный бэкэнд-раздел, или
- есть один большой бэкэнд-пакет.
Лично я склоняюсь к первому варианту, и вы можете прочитать об этом в моем предыдущем ответе, но есть люди, которые предпочитают иметь отдельный пакет для всего бэкэнда - возможно, используя один из пакетов администратора.
Между прочим, это нормально для связок - вам не нужно делать их независимыми друг от друга. Например, JMSDiExtraBundle зависит от библиотеки метаданных и JMSAopBundle, что, в свою очередь, зависит от cg-библиотеки. Если вы попытаетесь сохранить пакеты полностью независимыми, у вас получатся большие монолитные куски кода, состоящие из одного пакета.
Для каждого проекта я начинаю с одного CoreBundle, где я собираю все вместе. Затем я просто разрабатываю в нем функции и со временем я переоцениваю его - если я когда-нибудь смогу использовать эту функцию где-нибудь еще (или даже выпустить для открытого исходного кода), я перенесу ее в новый пакет.
"Размер" функции, стоящей отдельного пакета, на самом деле не имеет значения - я видел пакеты ОС размером с 1 единственный файл js:D
Одно можно сказать наверняка - объединение всего в один пакет - это плохо, это идет вразрез со всей причиной, по которой эта архитектура была реализована в первую очередь!
Возможно, вам поможет мой ответ в следующей теме: Symfony 2: Местоположение сущностей
Я не мастер Symfony2, но я думаю, что у меня есть хорошее представление о дизайне пакета; Конечно, нет универсального ответа, но вы можете следовать некоторым "лучшим практикам".
Прежде всего, я не думаю, что большие связки - хорошее решение; вы больше не разбиваете свой проект на приложения, как вы делали с Symfony1.4. Вы можете спросить: "Но что я могу сделать с логикой внешнего интерфейса / внутреннего интерфейса?"; довольно просто, использовать контроллер!
Каждый пакет должен ссылаться на модуль, камень в стене вашего проекта. Вы должны разделить свою заявку; многие пачки не плохие. Конечно, не делайте связку для каждой сущности, это было бы пустой тратой времени. Но представьте себе приложение для блога: у вас будет набор пользователей, пакет статей (который будет управлять записями, категориями, ...), в конечном итоге пакет для статических страниц,...
Вполне логично, что ваш пакет связан; вы создаете целое приложение, поэтому в этом случае они связаны между собой. Но ключевое слово здесь - "обобщение"; Ваш пакет должен быть связан с другим пакетом, а не только с вашим. Вы должны быть в состоянии повторно использовать его в других проектах.
Удачи!