2011-11-19 8 views
6

저는 Symfony 2를 처음 접했고 services과 같은 고급 주제로 이동하고 있습니다. 언제 객체가 서비스가되어야 하는가?Symfony2 서비스에 대한 이해

예를 들어, REST 서비스를 호출하기위한 Facade 객체가 있다고 가정 해보십시오. 이 클래스에는 사용자 이름과 비밀번호가 필요합니다. 그 클래스를 글로벌 서비스로 모델링하는 것이 올바른가? 전체 프로젝트의 일부에서만 사용 되더라도?

# 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

정의 :

서비스는 특정 작업을 수행하는 모든 PHP 객체에 대한 일반적인 용어이다. 서비스는 일반적으로 데이터베이스 연결 개체 또는 전자 메일 메시지를 배달하는 개체와 같이 "전역 적"으로 사용됩니다. Symfony2에서는 서비스가 종종 설정되고 서비스 컨테이너에서 검색됩니다. 많은 분리 된 서비스가있는 응용 프로그램은 서비스 지향 아키텍처를 따릅니다.

나는 귀하의 예가 서비스를 받기에 완벽한 후보라고 생각합니다.

API 클라이언트가 필요한 모든 장소에 건설 코드를 복사하지 않으려합니다. 이 작업을 의존성 주입 컨테이너에 위임하는 것이 좋습니다.

이렇게하면 유지 관리가 더 쉽습니다 (구성은 한 곳에서 이루어 지므로 구성 가능합니다).

API 클라이언트 클래스를 사용하는 코드에 영향을주지 않고 (동일한 인터페이스를 구현하는 한) API 클라이언트 클래스를 쉽게 변경할 수 있으므로 더욱 유연합니다.

나는 황금률이 ​​있다고 생각하지 않습니다. 그러나 기본적으로 작업을 구현하는 모든 클래스는 서비스를위한 좋은 후보자입니다. 반면 엔티티는 데이터 소유자 인 경우가 많지 않습니다.

항상 Fabien의 주제 시리즈를 참조하십시오. http://fabien.potencier.org/article/11/what-is-dependency-injection

1

네, 구성 부분을 남겨 둡니다. 이 클래스가 필요할 때마다 사용자 이름과 비밀번호를 가져 와서 생성자에게 넘기지 않을 것입니다. Symfony2 glossary에서 촬영