Minha primeira semana com o Symfony
Em busca de novos desafios, recentemente resolvi mudar de emprego e isso implicou na mudança do framework com o qual trabalho. Depois de tanto tempo trabalhando com o Laravel, o qual acompanho desde a versão 5.3 (se encontra na versão 7.x, no momento em que escrevo esse artigo), foi um grande desafio ir para outro framework.
Trabalhar com uma nova ferramenta, diferente da qual eu aprendi na época da faculdade e utilizei desde então, tem sido satisfatório. Algo que sempre me questionei, é se eu poderia reaproveitar o conhecimento que adquiri em um framework e aplicar em um outro. Tendo isso em mente resolvi escrever um pouco sobre essa experiência e traçar paralelos entre o uso de dois frameworks.
Aqui escreverei como foi minha primeira semana com o Symfony e minhas primeiras impressões do ecossistema.
Antes de começar eu gostaria de fazer um disclaimer: Esse não é um artigo sobre comparação de frameworks, apenas minhas impressões baseadas na minha experiência desenvolvendo com eles.
First Impressions of Earth
A primeira vista o Symfony parece muito mais complexo que os outros frameworks PHP dos quais trabalhei: o finado Codeigniter e o famoso Laravel, no qual vou falar mais por ter sido minha principal ferramenta de trabalho desde que comecei a usá-lo.
O Laravel é muito bom no que se propõe: desenvolvimento rápido e ágil pra quem precisa de um MVP ou fazer aquele freelance de fim de semana. Porém, a estrutura padrão se mostra bem precária quando trabalhamos em projetos maiores, logo adotamos vários padrões para estruturar o projeto e trazer mais organização no desenvolvimento. Isso não quer dizer que ele não possa ou não deva ser utilizado, se aplicarmos padrões de forma correta e consistente, podemos ter um ótimo projeto construído com Laravel.
O Symfony, por sua vez, já traz algumas padronizações visando a escalabilidade da codebase do projeto, como: Repository pattern que utilizamos para abstrair consultas complexas ao banco de dados e Service layer para escrevemos lógicas de negócio que não ficarão perdidas em controllers ou models, tornando o desenvolvimento muito mais desacoplado. Isso é muito reforçado pela alta utilização do Service Container, que nos permite fazer a injeção de dependências que ajuda a tornar o desenvolvimento ainda mais organizado e flexível.
É legal ressaltar que os dois possuem containters bem similares, ambos possibilitam que façamos dependency injection através de auto-wiring, que nos permite instanciar uma classe passando-á como parâmetro a outra classe. Ambos permitem configurações mais avançadas, como passagem de parâmetros primitivos (inteiros, strings e etc) ou abstratos (objetos, interfaces).
Annotations
É outro fator que me agradou muito no symfony, que são propriedades adicionados à atributos, métodos e classes que as configuram para ter determinado comportamento, um bom exemplo é o sistema de roteamento do Symfony.
Nas rotas temos duas opções: utilizar as annotations onde em cima de cada método do controller configuraremos o endpoint, nome da rota, parâmetros e etc ou utilizar um arquivo .yaml.
No laravel, utilizamos as rotas armazenadas em um arquivo PHP único, ou seja, quando o projeto é muito grande facilmente temos um arquivo com mais de mil linhas, tornando difícil a leitura e a busca por uma rota específica.
Usando annotations minha primeira impressão é de que ficaria ruim achar as rotas dentro dos controllers, porém, como o Symfony propõe uma organização maior, não tive essa dificuldade. Achei mais organizado mantendo dessa forma e também ajudou a manter um fluxo de trabalho mais simples, sem precisar de tanta troca de contexto na hora de escrever um novo endpoint em um arquivo separado.
CLI
Para quem vem do Laravel e está acostumado com o Artisan, não terá desafios para se acostumar com a CLI do symfony, pois ela tem o mesmo funcionamento e sistema de commands que o Artisan oferece. Uma CLI muito completa que ajuda muito no fluxo de desenvolvimento, na hora de criar entidades, controllers, gerar migrations, rodar SQL diretamente no terminal (que é algo interessante que não tem no Laravel).
Um dos grandes diferenciais do CLI do Symfony, que ganhou minha atenção, foi poder gerar as tabelas juntamente com a criação da entidade (model), você pode especificar o nome do campo, o tipo, tamanho, se é nullable. Essa funcionalidade também leva a outro ponto de divergência entre os dois frameworks em questão, a criação de relacionamentos, que no Symfony é gerada pelo console em um passo-a-passo no final modificando as duas entidades adicionando os relacionamentos.
Doctrine
Provavelmente o ORM mais famoso do PHP, até então, se mostra muito poderoso durante o desenvolvimento. O que me surpreendeu enquanto o aprendia é a utilidade que ele me trouxe durante o desenvolvimento, me permitindo gerar versionamentos das minhas migrations, rodar SQL, fazer dumps, criar, remover banco de dados e muito mais.
Os frameworks PHP modernos possuem muitas semelhanças e um dos motivos disso é que até pouco tempo atrás todos faziam parte da PHP-FIG, mas alguns começaram a sair como o Laravel e o Symfony.
Nesse artigo tentei traçar um paralelo entre os dois dos mais populares frameworks PHP. Para quem planeja (ou precisa, assim como eu!) fazer a transição do Laravel para o Symfony, não vai encontrar muita dificuldade para fazê-la, visto que o Laravel é fortemente baseado no Symfony e possui várias equivalências e ter essa referência na hora de fazer busca por recursos ou funcionalidades do framework.
Muito obrigado à todos que leram, qualquer feedback é sempre bem-vindo!