Как вы организуете свои пакеты в проектах Symfony2?

У меня есть точный вопрос, который есть у этого парня: http://groups.google.com/group/symfony2/browse_thread/thread/cd35132cc6972f29

Я просто скопирую это здесь:

Мне было интересно, какие разные способы организации пакетов в рамках проекта люди используют.

Я, кажется, в конечном итоге либо один массивный пакет для проекта или множество пакетов, которые тесно связаны друг с другом. например;

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

Ребята, вы разделяете их или складываете их в одну связку?

3 ответа

Редактировать: я больше не использую пакеты для кода приложения.


Лично я предпочитаю иметь пакет на раздел приложения. Например:

  • UserBundle
  • BlogBundle
  • ForumBundle
  • JobBundle
  • StoreBundle
  • так далее

Это нормально, если приложение представляет собой мешанину из нескольких функций, ни одна из которых не является достаточно большой, чтобы требовать отдельное приложение и / или поддомен. Но если бы я разрабатывал большое приложение интернет-магазина, мои пакеты были бы более конкретными:

  • UserBundle
  • ProductBundle
  • CartBundle
  • SearchBundle
  • WishlistBundle
  • так далее

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

И у меня обычно есть CommonBundle, куда идут все общие вещи, такие как глобальный CSS, изображения, макеты и т. Д.

Также есть как минимум два варианта для бэкэнд-организации:

  1. каждый пакет имеет свой собственный бэкэнд-раздел, или
  2. есть один большой бэкэнд-пакет.

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

Между прочим, это нормально для связок - вам не нужно делать их независимыми друг от друга. Например, JMSDiExtraBundle зависит от библиотеки метаданных и JMSAopBundle, что, в свою очередь, зависит от cg-библиотеки. Если вы попытаетесь сохранить пакеты полностью независимыми, у вас получатся большие монолитные куски кода, состоящие из одного пакета.

Для каждого проекта я начинаю с одного CoreBundle, где я собираю все вместе. Затем я просто разрабатываю в нем функции и со временем я переоцениваю его - если я когда-нибудь смогу использовать эту функцию где-нибудь еще (или даже выпустить для открытого исходного кода), я перенесу ее в новый пакет.

"Размер" функции, стоящей отдельного пакета, на самом деле не имеет значения - я видел пакеты ОС размером с 1 единственный файл js:D

Одно можно сказать наверняка - объединение всего в один пакет - это плохо, это идет вразрез со всей причиной, по которой эта архитектура была реализована в первую очередь!

Возможно, вам поможет мой ответ в следующей теме: Symfony 2: Местоположение сущностей

Я не мастер Symfony2, но я думаю, что у меня есть хорошее представление о дизайне пакета; Конечно, нет универсального ответа, но вы можете следовать некоторым "лучшим практикам".

Прежде всего, я не думаю, что большие связки - хорошее решение; вы больше не разбиваете свой проект на приложения, как вы делали с Symfony1.4. Вы можете спросить: "Но что я могу сделать с логикой внешнего интерфейса / внутреннего интерфейса?"; довольно просто, использовать контроллер!

Каждый пакет должен ссылаться на модуль, камень в стене вашего проекта. Вы должны разделить свою заявку; многие пачки не плохие. Конечно, не делайте связку для каждой сущности, это было бы пустой тратой времени. Но представьте себе приложение для блога: у вас будет набор пользователей, пакет статей (который будет управлять записями, категориями, ...), в конечном итоге пакет для статических страниц,...

Вполне логично, что ваш пакет связан; вы создаете целое приложение, поэтому в этом случае они связаны между собой. Но ключевое слово здесь - "обобщение"; Ваш пакет должен быть связан с другим пакетом, а не только с вашим. Вы должны быть в состоянии повторно использовать его в других проектах.

Удачи!

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