2011-11-19 69 views
6

我是Symfony 2的新手,我正在轉向高級主題,如services。什麼時候一個對象是一個服務?瞭解Symfony2服務

例如,假設您有用於撥打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%] 

回答

13

定義:

A服務是執行特定任務的任何PHP對象的總稱。服務通常用於「全局」,如數據庫連接對象或傳遞電子郵件的對象。在Symfony2中,服務通常是從服務容器中配置和檢索的。據說具有許多分離服務的應用程序遵循面向服務的體系結構。

我認爲你的例子是一個服務的完美候選人。

您不想將施工代碼複製到您需要您的API客戶端的所有地方。將此任務委託給依賴注入容器更好。

這種方式更容易維護(因爲施工發生在一個地方並且可配置)。

它也更靈活,因爲您可以輕鬆更改API客戶端類而不影響使用它的代碼(只要它實現相同的接口)。

我不認爲有一個黃金法則。但基本上所有實施任務的班級都是服務的理想人選。另一方面,實體並不像它們通常只是數據持有者那樣。

我總是推薦Fabien的系列文章:http://fabien.potencier.org/article/11/what-is-dependency-injection

1

是的,因爲這會讓您省去配置部分。每次你需要這個類的時候,你都不會去獲取用戶名和密碼,並把它提供給構造函數。從Symfony2 glossary採取