Мне нравится думать об этом так: пакет должен представлять определенную функцию или набор похожих функций для проекта.
Ваш первый пример лучше использует пакеты, чем второй, потому что назначение каждого пакета более определено. Хотя можно использовать один CRMBundle для всего, на самом деле вы не воспользуетесь возможностью Symfony организовать ваш код. Кроме того, если вы хотите перенести код своей новостной рассылки в новый проект, но не всех кода CRM, вам будет проще копировать NewsletterBundle, чем копировать CRMBundle, а затем сокращать. это.
Когда вы думаете о проекте Symfony2, иногда вам хочется забыть все, что вы знаете о symfony 1.x, поскольку они используют совершенно разные подходы к решению многих проблем. Например, в symfony 1 было принято создавать приложение «frontend» и «backend» для проекта, и каждое приложение, очевидно, содержало бы логику, специфичную для этих частей проекта. Таким образом, у вас может быть контроллер информационного бюллетеня как во внешнем, так и во внутреннем приложениях. В Symfony2 лучше использовать только один пакет Newsletter, но с двумя контроллерами (возможно, с именами 'frontend' и 'backend'). Опять же, непосредственная выгода от этого заключается в том, насколько многократно используется ваш код.