2011-12-07 5 views
8

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

Я просто скопировать и вставить его здесь:

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

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

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

Вы, ребята, разделили их или свалили все в одном комплекте?

+1

Похоже, что это может стать «дискуссионным вопросом». Кроме того, множество ответов одинаково справедливо здесь без конкретного примера проблемы. Различные комбинации сущностей могут изменить ответ, например: 'User' и' Organisation' (при условии, что в системе существуют другие зависимости от организации) - Различные пакеты. 'BlogPost' и' BlogPostRevision' - тот же пакет. Это частично интуиция, основанная на дизайне системы - пакет должен просто инкапсулировать некоторые функции, которые вы считаете сплоченными. – Kasheen

ответ

6

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

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

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

+0

Я также начинаю использовать CoreBundle, если проект не большой, нам не нужно создавать так много пакетов ... :) +1 – ianaz

0

Мой ответ в следующей теме, вероятно, может помочь вам: Symfony 2 : Location of Entities

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

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

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

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

Удачи вам!

15

Редактировать: I don't use bundles for app-specific code anymore.


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

  • UserBundle
  • BlogBundle
  • ForumBundle не
  • JobBundle
  • StoreBundle
  • и т.д.

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

  • UserBundle
  • ProductBundle
  • CartBundle
  • SearchBundle
  • WishlistBundle
  • и т.д.

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

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

Также есть по крайней мере два варианта серверной организации:

  1. у каждого пучка есть своя бэкэнд-секция, или
  2. есть один большой бэкэнд-пакет.

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

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

+0

Большое вам спасибо за это объяснение! –

Смежные вопросы