Куда мне поместить классы в Symfony, которые не являются ни контроллерами, ни моделями?

Для моего пакета приложений мне понадобятся некоторые классы, которые не являются ни контроллерами, ни моделями. Например, я хотел бы иметь класс scorecard, в котором есть такие члены, как «навык», «эффективность», «красота» и т. д. Кроме того, он может иметь метод/геттеры-члены, такие как «meanScore».

Куда пойдет такой класс во фреймворке Symfony?


person Robert Martin    schedule 06.09.2011    source источник


Ответы (3)


Я согласен с @Gordon, что это звучит как бизнес-объект. Но если вы уверены, что это не так, ваш следующий шаг — выяснить, как бы вы его классифицировали. Это помощник? Слушатель событий? Полезный класс? Как только вы это выясните, спросите себя: относится ли это к пакету или вы собираетесь повторно использовать его в других проектах?

Допустим, вы решили, что это прослушиватель событий и принадлежит пакету. Поместите это в MyBundle/EventListener. Если это помощник, поместите его в MyBundle/Helper. Теперь, если вы планируете повторно использовать его в проектах (что в данном случае на самом деле не похоже на то, но потерпите меня...), возможно, вам лучше создать для него место в vendor.

Важно помнить, что, поскольку Symfony2 так молод, на самом деле не существует окончательного списка лучших практик, отвечающих на подобные вопросы. Сейчас нам решать, что работает, а что нет. Это как дикий запад :)

person Steven Mercatante    schedule 06.09.2011

Для себя я отвечаю на такого рода вопросы следующим образом: я иду на KnpBundles и проверяю, как это делают другие разработчики.

Еще одна вещь, которую следует отметить, это то, что Symfony2 — это свобода выбора, когда дело доходит до конфигурации. Вы можете засунуть все в папку Random для всех забот ядра Symfony2, если вы правильно настроили его. Ну, это, наверное, чересчур, но, например, Listener или EventListener - без разницы.

Теперь, если вы спросите меня, я бы сказал, что для Scorecard - в зависимости от того, где вы собираетесь его использовать, либо Service, либо Helper/Util

Что касается breadcrumb, это хороший пример расширения ветки.

person Inoryy    schedule 07.09.2011
comment
Я не думаю, что это сервис. Службы обычно выполняют вычисления, вызывая общедоступный API объектов домена. Они редко инкапсулируют свое собственное состояние (мастерство, эффективность, красоту). Они больше похожи на тонкий промежуточный слой между внешним слоем, таким как пользовательский интерфейс, и уровнем предметной области. - person Gordon; 07.09.2011

Поскольку этот класс, по-видимому, представляет бизнес-объект из вашего Домена, он принадлежит Модели.

person Gordon    schedule 06.09.2011
comment
Как быть в случае, когда это не бизнес-объект. Скажем, у меня есть класс «хлебные крошки» с двумя членами «имя» и «href»? - person Robert Martin; 07.09.2011
comment
@ Роберт, я не знаю, куда бы Symfony и Twig это поместили. Я бы все же поместил его в модель, хотя и не внутри уровня домена, а на общем уровне приложения, потому что это часть пользовательского интерфейса. Или, если его можно использовать повторно, я бы поместил его в какую-то папку framework/lib - person Gordon; 07.09.2011