Service Decoration com Symfony 2/3

Marcelo Santos
2 min readAug 3, 2017

--

I am a human! Believe me!

The english version: http://www.marcelsud.com/service-decoration-with-symfony-2-3/

Uma das features menos utilizadas do Symfony é o “Service Decoration”. Com essa feature, aplicar o padrão de projetoDecorator” se torna uma tarefa muito mais simples.

A idéia do Decorator é “adicionar um comportamento a um objeto já existente em tempo de execução”

Veja a classe UserRepository abaixo:

Agora imagine que precisamos que um evento seja disparado toda vez que um usuário for adicionado, mas não queremos acoplar o repositório ao sistema de eventos.

Vamos então utilizar o padrão Decorator e por meio de composição vamos disparar o evento após a criação do usuário:

Repare que a classe UserRepository não sabe da existência da classe DecoratedUserRepository, isso é importante! Agora já é possível utilizar a nova classe onde quiser, mas ainda existe a necessidade de alterar todas as referências a UserRepository para DecoratedUserRepository, e se algum dia for necessário adicionar ou alterar o Decorator, o trabalho de manutenção se torna mais complexo…

E é aí que o Service Decoration do Symfony entra em ação! Veja só o arquivo de configuração dos serviços (services.yml):

O atributo “decorates” da configuração faz com que o serviço original seja sobrescrito pelo decorator. Ou seja, quando o serviço “app.user_repository” for requisitado, o serviço “app.decorated_user_repository” será utilizado, ao invés do original.

Para informações detalhadas de como usar essa feature, dê uma olhada na documentação do Symfony: Service Decoration

Até mais!

--

--