Понимание сервисов Symfony2 - PullRequest
       3

Понимание сервисов Symfony2

6 голосов
/ 19 ноября 2011

Я довольно новичок в Symfony 2 и перехожу к более сложным темам, таким как services . Когда объект должен быть сервисом?

Например, скажем, у вас есть объект фасада для вызова службы REST. Этот класс нуждается в имени пользователя и пароле. Было бы правильно моделировать этот класс как глобальный сервис? Даже если он используется только в части всего проекта?

# app/config/config.yml
parameters:
    my_proxy.username:  username
    my_proxy.password:  password

services:
    my_proxy:
        class:        Acme\TestBundle\MyProxy
        arguments:    [%my_proxy.username%, %my_proxy.password%]

Ответы [ 2 ]

13 голосов
/ 19 ноября 2011

Определение взято из глоссария Symfony2 :

Сервис - это общий термин для любого объекта PHP, который выполняет определенную задачу. Служба обычно используется «глобально», например, объект подключения к базе данных или объект, который доставляет сообщения электронной почты. В Symfony2 службы часто настраиваются и извлекаются из контейнера служб. Говорят, что приложение, которое имеет много разделенных сервисов, следует сервис-ориентированной архитектуре.

Я думаю, ваш пример - идеальный кандидат на услугу.

Вы не хотите копировать код конструкции во все места, где вам нужен клиент API. Лучше поручить эту задачу контейнеру внедрения зависимостей.

Этот способ проще поддерживать (так как построение происходит в одном месте и его можно настраивать).

Он также более гибкий, так как вы можете легко изменить клиентский класс API, не затрагивая код, который его использует (при условии, что он реализует тот же интерфейс).

Я не думаю, что есть золотое правило. Но в основном все классы, реализующие задачу, являются хорошими кандидатами на службу. С другой стороны, сущности не являются таковыми, они чаще всего просто держатели данных.

Я всегда рекомендую серию статей Фабьена на эту тему: http://fabien.potencier.org/article/11/what-is-dependency-injection

1 голос
/ 19 ноября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...