Blog

Symfony 2.0 foi lançado - O que podemos aprender com ele?

Eriksen Costa04.08.2011 - 02:22(upd: 25.07.2013 - 19:48)

28 de Julho de 2011 é a data no qual o tão aguardado Symfony 2.0 foi lançado. Totalmente reescrito, ele abraça padrões e traz muitas inovações ao mundo PHP.

Olhando no commit 65d0750 do Git do projeto, como alguém poderia esperar a onda de contribuições e inovações que formam a versão 2.0 do Symfony? Os números são impressionantes: 276.952 linhas de código, 2.000 pull requests de 250 contribuidores. É o projeto PHP mais popular no GitHub e o 12º mais popular no geral.

Como um projeto open source, nós podemos dizer certamente que o Symfony2 é um grande sucesso. Não é fácil enumerar as razões para este sucesso mas eu posso ao menos tentar. Enquanto algumas decisões técnicas podem ter parecido banais, provaram-se enormemente efetivas. Sendo mais específico, estou falando sobre a migração do repositório para o Git/GitHub e a troca do Lime pelo PHPUnit para testes de unidade.

Qualquer um que não tenha vivido embaixo de uma pedra nos últimos anos deve ter escutado alguma coisa sobre o Git, o sistema de controle de versão descentralizado. Você pode criar um fork de um repositório, criar branches e então facilmente enviar um patch para o dono do repositório pedindo que integre o seu código na árvore de código fonte principal. Esta é uma relação ganha-ganha para a forma em que projetos open source são desenvolvidos, onde pares ao redor do mundo copiam o código fonte e criam novas funcionalidades, refatoram o código ou corrigem bugs.

Então entra o PHPUnit. Enquanto o Lime 2 estava sendo desenvolvido (pelo Bernhard Schussek, desenvolvedor líder do componente Form do Symfony2), o PHPUnit já era o framework de teste de unidade de-facto do PHP. Usá-lo possibilitou que vários desenvolvedores já acostumados a ele pudessem contribuir código testado sem ter que aprender uma nova ferramenta. E você como um usuário do framework também irá se beneficiar disso, falo mais sobre isso em breve.

E a razão número 1 para mim. Começou quando Fabien Potencier, criador e desenvolvedor líder do projeto, deixou que a comunidade se envolvesse mais. Não que a comunidade não estivesse envolvida com o symfony 1.x, ela estava. É porque Fabien começou a interagir mais com ela e permitiu que esta fizesse grandes decisões sobres os componentes core. Mais democracia e menos ditadura benevolente. Ou como diz o terceiro segredo de Dries, “coloque a comunidade no controle”.

Sucesso!

Inovação

Com uma comunidade de incríveis desenvolvedores, ideias cultivadas desde o symfony 1.1 e funcionalidades introduzidas pelo PHP 5.3, o Symfony2 começou a liderar a inovação no ecossistema do PHP. A forma como ele abraça a especificação é tão única que é difícil encontrar o acrônimo MVC na documentação do projeto. Agora é tudo sobre a simplicidade da especificação HTTP: sua aplicação recebe uma requisição, sua obrigação é retornar uma resposta. E a documentação reforça isso, promovendo uma melhor separação das responsabilidades.

Abraçando os padrões PHP (PSR-0 autoloader, namespaces, PHPUnit), Symfony2 e seus componentes desacoplados são facilmente interoperáveis. Todos os 21 componentes que formam o framework podem ser usados como bibliotecas independentes.

O conceito de bundle junto com os componentes subjacentes facilitam o compartilhamento de funcionalidade e a publicação de código. Leve em conta as ferramentas que a comunidade Symfony criou para esta versão. Agora você sabe porque está liderando a inovação no ecossistema do PHP.

Talk is silver…

Quando chega na hora de desenvolver a sua aplicação com Symfony2, você irá notar que tudo se tornou menos mágico. Foi uma decisão de projeto dos desenvolvedores do Symfony2 que já estava provada pelo projeto Doctrine. Muito bem vinda. E quanto mais eu programo um projeto com Symfony2, mais eu noto como o framework simplesmente tenta não aborrecê-lo.

Lembra-se que eu te disse que iria falar mais sobre PHPUnit? Testar a sua aplicação se tornou muito mais fácil. Se você desenvolveu alguma coisa com symfony 1.x e já era acostumado a criar testes de unidade com PHPUnit, criar testes lime poderia parecer desajeitado. A testabilidade do framework e das aplicações criadas com ele melhorou muito. Amo muito tudo isso!

E aqui chegamos no container de Injeção de Dependência e toda a extensibilidade do framework. Eu posso falar por mim mesmo: foi extremamente útil nos estágios iniciais do desenvolvimento do IngressoPrático. O IngressoPrático é um site de venda exclusiva de ingressos para eventos promovidos por uma importante escola de balé. Nós estamos planejando um estudo de caso desse projeto e alguns posts explicando como nós criamos os mapas de assentos onde as pessoas escolhem os assentos desejados (é uma extensão Twig) e como nós integramos o formulário de registro padrão do FOSUserBundle com o formulário de Perfil da aplicação (sem tocar ou estender classes do FOSUserBundle).

E quando você esquece como alguma coisa funciona, a incrível documentação entra em jogo.

Conclusão

Symfony2 é o resultado de uma grande sinergia entre desenvolvedores talentosos. Ele ajuda a provar que o modelo de desenvolvimento open source promove inovação. O resultado é um framework perfeitamente projetado, com uma pletora de novas ferramentas legais. A diversão está de volta! Divirta-se!