O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

Seu framework é melhor pra quê?

64 visualizações

Publicada em

Um estudo comparativo entre frameworks PHP, analisando as diferentes abordagens, vantagens e desvantagens de cada um deles, a fim de entender em que situações cada um deles é mais adequado para uma aplicação.

Publicada em: Software
  • Seja o primeiro a comentar

Seu framework é melhor pra quê?

  1. 1. SEU FRAMEWORK É MELHOR PRA QUÊ? Jaime da Costa Pereira Neto
  2. 2. JAIME NETO ● Graduado em Telemática pelo CEFET-PB (atual IFPB) ● Especialista em Desenvolvimento de Software para Web pela UNIBRATEC (atual Estácio) ● Zend Certified Engineer - Zend Framework 1 ● Analista de Sistemas no Instituto Chico Mendes de Conservação da Biodiversidade (ICMBio) ● Programador PHP desde 2004 ● Membro do PHP-PB desde os primórdios
  3. 3. Vivemos em um mundo polarizado...
  4. 4. em que muitos acreditam que só pode existir um melhor...
  5. 5. automaticamente o resto é perda de tempo...
  6. 6. e tudo é 100% bom ou 100% ruim...
  7. 7. em todos os aspectos de nossas vidas...
  8. 8. claro que os frameworks não ficam de fora!
  9. 9. Ficam as questões: ● Será que todos os frameworks são apenas implementações diferentes para um mesmo fim? ● Os objetivos deles são os mesmos? ● Quais são melhores e em que aspectos? ● Existe um framework “bala de prata” que resolva todos os problemas?
  10. 10. Como desmistificar isso? /php-pb/Sua-escolha Proposta para a comunidade: ● Implementar um mesmo projeto em vários frameworks, a partir de um modelo padrão ● Promover a comparação entre os frameworks existentes ● Criar um modelo padrão para implementação de futuros projetos ● Tirar dúvidas básicas de configuração e implementação ● Ideia de Abdala Cerqueira, criada em 2012
  11. 11. Mas isso é suficiente? Comparação difícil quando temos: ● Programadores diferentes ● Estilos de codificação diferentes ● Apenas código ● Sem orientação da lógica utilizada ● Versões obsoletas depois de um tempo
  12. 12. O que fazer, então? ● Estudar os frameworks ● Definir os aspectos a serem levados em conta ● Definir um projeto básico a ser implementado neles ● Utilizar apenas o que eles oferecem ● Usar bibliotecas externas apenas se estiver explícito na documentação ● Botar a mão na massa!
  13. 13. O projeto ● Um BLOG ● 3 tipos de usuários (admin, user e guest) ● Posts ● Comentários ● Área administrativa ● Validação por email
  14. 14. Os aspectos ● Instalação ● Configurações ● Acesso ao BD ● Template engine ● Rotas ● Autenticação ● Autorização ● Documentação ● Formulários ● Validação ● Envio de Emails ● Paginação ● Tradução de textos ● Migrations
  15. 15. Frameworks escolhidos ? 5.8.17 3.4.3 3 4.3.3
  16. 16. Mão na massa!
  17. 17. Criando o projeto composer create-project laravel/laravel blog --prefer-dist Framework completo instalado, com todos os pacotes Deve ser instalado como uma extensão do PHP. phalcon project blog simple --template-engine=volt composer create-project -s dev zendframework/skeleton-application blog Pacotes adicionais devem ser instalados conforme necessário composer create-project -s dev zendframework/zendframework blog → Framework completo, com todos os pacotes composer create-project symfony/skeleton blog Pacotes adicionais devem ser instalados conforme necessário
  18. 18. Ferramentas RAD artisan e o tinker!!! Instalado separadamente, via git ou download devtools zendtool composer require symfony/console console
  19. 19. Servidor embutido php artisan serve phalcon serve composer serve composer require server --dev php bin/console server:run
  20. 20. Models e controllers php artisan make:model Post -m php artisan make:controller PostController --resource phalcon scaffold posts --get-set --template-engine=volt 😃 Faz na mão mesmo… 😖 composer require maker-bundle --dev php bin/console make:entity php bin/console make:controller PostController
  21. 21. Consulta no BD com paginação $posts = Post::orderBy('id', 'desc')->paginate(10); 😍 $posts = Posts::find(['order' => 'id desc']); $paginator = new Paginator(['data' => $posts, 'limit'=> 10, 'page' => $page]); $paginator->getPaginate(); require zendframework/zend-db composer require zendframework/zend-paginator $posts = new Select('posts')->order('id desc'); $paginator = new Paginator(new AdapterArrayAdapter($posts)); $paginator->setItemCountPerPage(10)->setCurrentPageNumber($page); 😩 composer require symfony/orm-pack Dentro da classe PostRepository: $this->createQueryBuilder('p')->orderBy('p.id', 'desc')->setFirstResult($limit * ($page - 1)) ->setMaxResults($limit)->getQuery()->getResult();
  22. 22. Template engine blade {!! $post->title !!} {{ ... }} {{-- … --}} @if ... @endif volt {{ post.title|e }} {% … %} {# … #} ou phtml phtml <?= $this->escapeHtml($post->title) ?> <?php … ?> flexível para utilizar outros composer require template twig {{ post.title|e }} {% … %} {# … #}
  23. 23. Rotas Route::get('/foo', 'FooController@index')->name('foo.index'); Route::post('/bar', 'BarController@index')->name('bar.index'); $router->add('/foo', ['controller' => 'foo', 'action' => 'index' ]); $router->add('/bar', ['controller' => 'bar', 'action' => 'index' ]); composer require zendframework/zend-router $router->addRoute('foo', Method::factory(['route' => '/foo', 'verb' => 'post,get', 'defaults' => ['controller' => 'foo', 'action' => 'index']])); composer require annotations /** @Route('/foo', name='foo_index') */ 😃 Pode restringir o protocolo HTTP se definido em routes.yaml
  24. 24. Autenticação php artisan make:auth 😎 Cria cadastro e recuperação de senha, login, formulários, rotas e já deixa preparada a estrutura para validação de e-mail Limita-se a oferecer algumas ferramentas para gerenciamento de sessão, e geração/ verificação de senha. Exige que criemos praticamente toda a lógica de autenticação. 😒 composer require zendframework/zend-authenticator Apesar de poderoso, não é nem um pouco prático e exige muita configuração e o uso de muitas classes (MUITO CÓDIGO). 😱 composer require maker-bundle --dev php bin/console make:auth e responde algumas perguntas 😄 Cria cadastro, login, formulários e rotas
  25. 25. Autorização Policies 😍 php artisan make:policy PostPolicy --model=Post ACL - Lista de Controle de Acesso RBAC - Controle de acesso baseado em papéis ACL - Lista de Controle de Acesso composer require symfony/security-bundle security.yaml, inserção em código ou annotations 😃
  26. 26. Migrations php artisan make:seeder PostsSeeder php artisan db:seed Faker - Criação de conteúdo aleatório 😉 phalcon migration generate 😍 phalcon migration run Classes versionadas Faz na mão mesmo… 😒 composer require --dev doctrine/doctrine-fixtures-bundle php bin/console make:fixtures php bin/console doctrine:fixtures:load
  27. 27. Tradução de textos {{ __('Translate this') }} Fácil de encontrar pacotes de tradução prontos Diferencia tradução de atributos e textos em geral Bastante personalizável Exige um pouco de configuração 😓 Organizado e simples de usar composer require zendframework/zend-mvc-i18n Bastante flexível e personalizável composer require symfony/translation {{ 'Translate this'|trans }} ou {% trans %} Translate this {% endtrans %} php bin/console translation:update --dump-messages --output-format=yaml --force pt 😍
  28. 28. Visão geral Configuração Simples e organizada. Documentação Excelente na maior parte, mas contém algumas falhas. Estrutura de pastas Padrão simples, não muito flexível. Formulários Validação prática. Segurança contra CSRF. Não oferece, nativamente, ferramentas para gerar campos do formulário. Paginação Super simples de implementar, oferece diversos tipos. E-mails Oferece uma API bastante simples e fácil de implementar. Comunidade Enorme e extremamente ativa. Extremamente prático e produtivo Pouca codificação
  29. 29. Visão geral Configuração Simples e organizada. Documentação Incompleta e muitas vezes confusa. Deficiente nas traduções. Estrutura de pastas Padrão simples, bastante flexível e personalizável. Formulários Muitos recursos de validação, nem sempre muito práticos. Segurança contra CSRF. Geração de campos de formulário. Paginação Ferramenta simples. Não oferece template pronto. E-mails Não oferece uma API própria. Comunidade Modesta, mas vem crescendo. Extremamente performático Instalação e atualização de versão podem ser complicadas
  30. 30. Visão geral Configuração Complicada, exige criação de muitas classes, muito código. Documentação Bastante completa, mas poderia ter mais exemplos práticos. Estrutura de pastas Bastante flexível e personalizável. Formulários Ferramenta para criação poderosa. Muitas ferramentas para validação e filtros. Paginação Ferramenta robusta. Não oferece template pronto. E-mails Ferramenta com diversas classes de transporte. Comunidade Muito grande, mas vem perdendo espaço. Muito robusto e completo Código muito bem testado Adequado para sistemas muito grandes
  31. 31. Visão geral Configuração Simples e organizada. Documentação Bastante completa, com bons exemplos práticos. Estrutura de pastas Padrão simples, não muito flexível. Formulários Ferramenta para criação poderosa. Muitas ferramentas para validação e filtros. Segurança contra CSRF. Paginação Não oferece uma API própria. E-mails Utiliza o SwiftMailer (API própria em desenvolvimento) Comunidade Muito grande e ativa. Muito robusto, flexível e produtivo Faz bastante uso de ferramentas externas consolidadas
  32. 32. Diferenciais Produtividade Performance Controle Flexibilidade ● Gera muita coisa automática ● Foco nas regras de negócio ● Código compilado ● Não precisa ser interpretado ● Nada acontece sem que você saiba como ● Permite instalar apenas o que precisar ● Permite instalar apenas o que precisar ● Aproveita o melhor de outras ferramentas
  33. 33. Conclusão ● Não existe “bala de prata”! ● A escolha por um framework vai depender de: ○ Tamanho e necessidades do projeto ○ Tamanho e experiência da equipe ○ Exigências de performance ○ Acesso ao servidor e suas configurações ○ Importância do controle ○ Interação com outras ferramentas ○ Tempo disponível
  34. 34. Depois dessa trabalheira toda… compartilhar! ● Especificações do projeto ● Orientações de instalação ● Passo-a-passo da implementação ● Resumo de cada framework ● Comparação e conclusões AGUARDEM!
  35. 35. Dúvidas? jaime neto contato@jaimeneto.com http://jaimeneto.com @jaimecpn
  36. 36. OBRIGADO!

×