了解Symfony2服务

gre*_*emo 6 symfony

我是Symfony 2的新手,我正在转向服务等高级主题.应该何时将对象作为服务?

例如,假设您有一个Facade对象用于调用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%]
Run Code Online (Sandbox Code Playgroud)

Jak*_*las 13

Symfony2词汇表中获取的定义:

服务是执行特定任务的任何PHP对象的通用术语.服务通常"全局"使用,例如数据库连接对象或传递电子邮件消息的对象.在Symfony2中,通常从服务容器配置和检索服务.据说具有许多解耦服务的应用程序遵循面向服务的体系结构.

我认为你的例子是服务的完美候选人.

您不希望将构造代码复制到您需要API客户端的所有位置.最好将此任务委托给依赖注入容器.

这样就更容易维护(因为构造在一个地方发生并且可以配置).

它也更灵活,因为您可以轻松更改API客户端类,而不会影响使用它的代码(只要它实现相同的接口).

我不认为这是一条黄金法则.但基本上所有实现任务的类都是服务的良好候选者.另一方面,实体并不像他们通常只是数据持有者那样.

我总是推荐Fabien关于这个主题的系列文章:http://fabien.potencier.org/article/11/what-is-dependency-injection