Saudações méros mortais, primeiro, peço desculpas pelo período sem trazer novidades para vocês (estive em uma excursão pela galáxia), em breve escreverei um artigo sobre essa viagem. Neste artigo mostrarei sobre annotations (é claro, está no título).

Como disse meu amigo Guilherme Diego no artigo Código Limpo é uma Responsabilidade — Blocos:

alt text

Enquanto escrevo, vou ouvindo o álbum As Daylight Dies da banda Killswitch Engage, é um banda muito bacana.

Enfim, vamos ao que interessa, vem comigo.

Introdução

Em um projeto recente do qual participei do processo de refactoring, o que me auxiliou bastante, foi a implementação de annotations, onde foi possível segregar informações estáticas e até atingir algumas práticas de clean code, salientando que isso foi uma solução que funcionou bem no respectivo projeto.

Neste artigo eu não discutirei se é o correto, ou não, apenas demonstrarei como implementar custom annotations com o doctrine reader. Fica sobre teu critério meu chapa!

Escopo

No exemplo que mostrarei, utilizaremos os seguintes arquivos:

  1. compose.json: Dependência e informações do projeto;
  2. PeopleAnnotation.php: Será a nossa annotation, utilizaremos os atributos para receber valores de quem irá consumir a annotation;
  3. People.php: Iremos consumir nossa annotation e informar os respectivos valores para segregarmos informações;
  4. ReaderAnnotation.php: Neste arquivo iremos juntar tudo e fazer uma sopa de letrinhas.

Irei demonstrar os códigos no artigo, caso necessário, você poderá verificar no Gist.

Dependência, sim você precisará dela.

Para trabalhar com o Doctrine Annotation Reader, será necessário possuir a dependência “doctrine/common”, conforme o arquivo composer.json abaixo:

 

Desenvolvendo a classe da annotation.

Resumindo, esta classe será responsável pela annotation, ou seja, os atributos públicos da classe armazenarão informações que poderão ser informadas por quem irá consumir a annotation em questão. Segue abaixo o arquivo PeopleAnnotation.php, é a nossa annotation:

 

Repare que, a classe em questão possui uma annotation, sendo ela @Annotation, isto é necessário para informar ao Doctrine Annotation Reader que a classe em questão, realmente é uma annotation.

Consumindo a annotation

alt text

Nesta etapa, iremos consumir a annotation PeopleAnnotation e informaremos os valores que a annotation disponibiliza.

Salientando, é possível consumir a annotation em:

  • classes;
  • atributos;
  • métodos.

No exemplo abaixo, temos a classe People, que comsumirá a PeopleAnnotation:

 

Repare que, a classe People está consumindo a annotation tanto na respectiva classe, quanto nos atributos e métodos.

Vamos verificar a People. Finalizando a sopa de letrinhas

Nesta etapa final, iremos instanciar a classe AnnotationReader para lermos as annotations extraídas da classe People (que está consumindo a PeopleAnnotation).

Classes nativas utilizadas no exemplo:

Abaixo o exemplo:

 

Resultado (você já deve ter executado os exemplos)

alt text

 

Referências

  1. Artigo sobre o assunto em inglês
  2. Doctrine - Documentação oficial
  3. Documentação oficial PHP.net

Conclusão

A utilização de annotation pode facilitar diversas condições, salientando que, a necessidade de implementar custom annotation varia de situação. Use o bom senso de programador.

Quaisquer feedbacks serão bem-vindos, fique à vontade para comentar e/ou implementar alguma informação.

Até breve méros mortais e eternos aprendizes (todos somos).