了解Symfony2服务

时间:2011-11-19 11:32:22

标签: symfony

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

例如,假设您有一个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%]

2 个答案:

答案 0 :(得分:13)

取自Symfony2 glossary

的定义
  

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

我认为您的示例是服务的完美候选者。

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

这种方式更容易维护(因为构造在一个地方发生,并且可以配置)。

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

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

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

答案 1 :(得分:1)

是的,因为这样可以省去配置部分。您不会获取用户名和密码,并在每次需要此类时将其提供给构造函数。