Symfony 4: Componha as suas Aplicações

Nota: O Symfony 4.0 será lançado no final de novembro deste ano.

O Symfony 3.0 foi entendiante, uma versão limpa do Symfony 2.8:

Symfony 3.0 = Symfony 2.8 — recursos obsoletos

O Symfony 4.0 será diferente:

Symfony 4.0 = Symfony 3.4 — recursos obsoletos + uma nova forma de desenvolver aplicações

Há ainda outra forma de pensar em uma nova versão principal:

Symfony 4.0 = Symfony 3.0 + todos os recursos adicionados em 3.x — recursos obsoletos + uma nova maneira de desenvolver aplicações

O Symfony 4.0 também exigirá PHP 7.1.

Ao pensar no que precisava ser alterado para o Symfony 4, foi considerada a experiência do dia-a-dia ao gerenciar uma aplicação.

Instalar um Bundle é muito Trabalhoso

O melhor método atual para adicionar mais dependências em uma aplicação Symfony é instalar bundles e bibliotecas através de pacotes do Composer.

Fato interessante: o Composer começou com uma conversa sobre como instalar genericamente bundles/plugins/extensões para o Symfony e phpBB.

Fato WTF: nem o Symfony, nem o phpBB usam o Composer como forma de instalar seus bundles/plugins/extensões.

Ao instalar um bundle do Symfony, usar somente o Composer não é suficiente; você também precisa habilitar e configurar o bundle corretamente antes de usar seus recursos. Aqui estão os passos típicos que você precisa executar:

  • Executar composer require symfony/bundle; deve ser manual, pois os desenvolvedores são responsáveis ​​por selecionar os pacotes que desejam instalar; no entanto, veremos que é possível melhorar isso ao instalar dependências no contexto de uma aplicação Symfony (sugestão: não seria legal executar composer req cli, composer req admin ou composer req mailer?);
  • Registrar o bundle na classe AppKernel;
  • Registrar algumas rotas (opcional);
  • Configurar o bundle de acordo com a sua preferência.

O primeiro passo não pode ser automatizado, mas os outros podem. A configuração não pode ser automatizada, mas provavelmente podemos gerar bons padrões como é feito na Edição Standard do Symfony para alguns bundles.

Dê uma olhada na documentação dos bundles populares. Todos os seus READMEs começam com o mesmo texto entediante.

Remover um Bundle é ainda mais trabalhoso

De vez em quando, você pode querer remover um bundle. Como fazer isso? Simples: composer remove symfony/bundle.

Bem, isso não é suficiente.

Lembra de como precisamos registrar o bundle, adicionar rotas e configuração? Precisamos desfazer isso agora também. Isso significa visitar vários arquivos para remover o bundle. O que torna a remoção de um bundle um processo chato e propenso a erros.

A Edição Standard do Symfony não é boa o suficiente

As Distribuições do Symfony foram uma tentativa de corrigir algumas dessas questões fornecendo um bom ponto de partida.

A mais popular, a Edição Standard do Symfony, é “otimizada” para aplicações frontend “tradicionais” para as quais você precisa de um banco de dados, um sistema de templates e uma forma de enviar e-mails. Mas ainda é relevante? E se você quiser iniciar uma aplicação estilo micro-framework? Ou um serviço de API/web?

A Edição Standard do Symfony faz escolhas pelo desenvolvedor, mas elas são poucas ou demais. As Distribuições Symfony não dimensionam bem; não é fácil remover dependências, e não é tão fácil adicionar novas.

Outro problema com as distribuições é que elas vêm com arquivos que você não deseja no seu projeto. Como os arquivos LICENSE e README. A maioria dos projetos não tem licença MIT e os autores provavelmente são diferentes dos que trabalharam na distribuição. Na mesma linha, você deve alterar quase todas as entradas do arquivo composer.json.

A remoção de poucos arquivos não é problema, mas eles crescem rapidamente.

Alguns anos atrás, a Edição Standard do Symfony veio com uma pequena demonstração para você iniciar rapidamente. Mas ela foi removida, pois as pessoas tiveram dificuldade em limpar as coisas porque a demonstração abrangia muitos arquivos. Foi uma decisão boa e má. Isso piorou a Edição Standard, já que os desenvolvedores não têm mais exemplos, mas também melhorou, pois os desenvolvedores não precisam mais limpar as coisas manualmente.

Ainda não está convencido? Dê uma olhada no arquivo README da distribuição REST:

Nenhum Ecossistema de Distribuição

E é provavelmente por isso que as Distribuições Symfony nunca decolaram. Além da Edição Standard, nenhuma delas é popular; E, de fato, são listadas apenas três delas no symfony.com.

As distribuições não são flexíveis o suficiente. Você não pode mudar de uma para outra. Você precisa comprar todas as escolhas delas ou nada. Elas não podem evoluir.

Distribuições são a abstração errada. Não precisamos de um projeto totalmente inicializado. Precisamos de uma maneira de evoluir uma aplicação ao longo do tempo.

A Experiência Ideal

Como desenvolvedor, eu quero começar pequeno, sem muitas dependências. Mas eu também quero poder expandir minha aplicação como desejar. De uma aplicação estilo micro-framework para um gigante monolito. Minha escolha. O framework não deve entrar no caminho.

Iniciar um novo projeto com o Symfony ou evoluir um projeto é atualmente muito complexo para iniciantes e muito trabalhoso para desenvolvedores Symfony avançados. Nós podemos fazer melhor.

Composição ao invés de Herança

Se você pensar sobre, as distribuições usam herança. A maioria das distribuições são forks da Edição Standard do Symfony com bundles adicionais. E quanto ao uso de composição? Eu quero usar a distribuição API com a gerador admin. Ou precisamos mesmo de distribuições? Provavelmente não.

Conheça o Symfony Flex, uma nova forma de criar e desenvolver as suas aplicações com facilidade.

O Symfony Flex destina-se a tornar simples e fácil a criação de aplicações Symfony, desde o projeto mais simples micro-estilo até os mais complexos com dezenas de dependências. Ele automatiza a adição e remoção de bundles. Ele cuida de fornecer padrões sensíveis. Ele ajuda a descobrir bons bundles.

O Symfony Flex será a maneira padrão de gerenciar as aplicações Symfony 4. Mas o Symfony Flex estará disponível como uma opção para gerenciar aplicativos Symfony 3.3 e 3.4 também! Dito isto, talvez será necessário quebrar a compatibilidade com versões anteriores até agora e o lançamento do Symfony 4. Considere o Symfony Flex como alfa antes do Symfony 4.

Fique atento pois a próxima publicação irá contar-lhe mais sobre o Symfony Flex. Enquanto isso, dê uma olhada na nova aplicação esqueleto usada pelo Symfony Flex. Não é o que você esperava, certo?

Tradução do artigo original publicado por Fabien PotencierSymfony 4: Compose your Applications