我是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%]
答案 0 :(得分:13)
服务是执行特定任务的任何PHP对象的通用术语。服务通常“全局”使用,例如数据库连接对象或传递电子邮件消息的对象。在Symfony2中,通常从服务容器配置和检索服务。据说具有许多解耦服务的应用程序遵循面向服务的体系结构。
我认为您的示例是服务的完美候选者。
您不希望将构造代码复制到您需要API客户端的所有位置。最好将此任务委托给依赖注入容器。
这种方式更容易维护(因为构造在一个地方发生,并且可以配置)。
它也更灵活,因为您可以轻松更改API客户端类,而不会影响使用它的代码(只要它实现相同的接口)。
我不认为这是一条黄金法则。但基本上所有实现任务的类都是服务的良好候选者。另一方面,实体并不像他们通常只是数据持有者那样。
我总是推荐Fabien关于这个主题的系列文章:http://fabien.potencier.org/article/11/what-is-dependency-injection
答案 1 :(得分:1)
是的,因为这样可以省去配置部分。您不会获取用户名和密码,并在每次需要此类时将其提供给构造函数。