Saindo do Legado com os Componentes Symfony - PHP Conference Brasil 2019

Saindo do Legado com os Componentes Symfony - PHP Conference Brasil 2019

Trabalhar com novos projetos nos dá a possibilidade de utilizar as ferramentas e tecnologias mais novas do mercado. Mas quando trabalhamos com projetos legados quase nunca temos essa oportunidade. Devido aos problemas inerentes ao projeto, o único caminho é manter a arquitetura e reduzir as alterações ao mínimo possível. Mas esta é mesmo a única opção?

Nesta palestra conheceremos alguns componentes do Symfony e veremos como podemos utilizá-los para reduzir o débito técnico de um projeto, e abrir caminho para uma atualização constante e menos turbulenta.

A725592dca6d199881b3187031f6d4d0?s=128

Adiel Cristo

December 07, 2019
Tweet

Transcript

  1. Adiel Cristo Dezembro 2019 Saindo do Legado com os Componentes

    Symfony
  2. Agenda

  3. Agenda ✔ O Monstro

  4. Agenda ✔ O Monstro

  5. Agenda ✔ A Aplicação

  6. Agenda ✔ A Aplicação

  7. Agenda ✔ A Aplicação ✔ Técnicas de Refatoração

  8. Agenda ✔ A Aplicação ✔ Técnicas de Refatoração ✔ Componentes

    Symfony
  9. Agenda ✔ A Aplicação ✔ Técnicas de Refatoração ✔ Componentes

    Symfony ✔ Revisão
  10. Um Pouco de Contexto

  11. Um Pouco de Contexto ✔ Arquitetura

  12. Um Pouco de Contexto ✔ Arquitetura ✔ Infraestrutura

  13. Um Pouco de Contexto ✔ Arquitetura ✔ Infraestrutura ✔ Documentação

  14. Um Pouco de Contexto ✔ Arquitetura ✔ Infraestrutura ✔ Documentação

    ✔ Desenvolvimento
  15. Um Pouco de Contexto ✔ Arquitetura ✔ Infraestrutura ✔ Documentação

    ✔ Desenvolvimento ✔ Pessoas!!
  16. Arquitetura Conheça a arquitetura da aplicação...

  17. Arquitetura Para saber quando e o que refatorar.

  18. Infraestrutura Conheça a infraestrutura da aplicação...

  19. Infraestrutura Para saber o que você pode usar...

  20. Infraestrutura E como você pode usar.

  21. Documentação Leia a documentação da aplicação...

  22. Documentação Que documentação?!

  23. Documentação Se não tiver, crie!!

  24. Desenvolvimento Entenda o fluxo de desenvolvimento...

  25. Desenvolvimento … para saber onde e quando refatorar.

  26. Pessoas Entenda como funcionam as políticas da empresa...

  27. Pessoas Conheça a hierarquia...

  28. Pessoas E principalmente...

  29. Pessoas Conheça as pessoas...

  30. Pessoas Aprenda a lidar com elas...

  31. Pessoas E sua vida será muito mais fácil!

  32. Refatoração

  33. Refatoração “Processo de modificar um sistema de software para melhorar

    a estrutura interna do código sem alterar seu comportamento externo.” Wikipedia
  34. Indícios para Refatoração

  35. Indícios para Refatoração A aplicação é um monstro!! Quer mais

    indício que isso?!
  36. Indícios para Refatoração

  37. Indícios para Refatoração ✔ Código duplicado

  38. Indícios para Refatoração ✔ Código duplicado ✔ Método longo

  39. Indícios para Refatoração ✔ Código duplicado ✔ Método longo ✔

    Classe grande
  40. Indícios para Refatoração ✔ Código duplicado ✔ Método longo ✔

    Classe grande ✔ Lista de parâmetros longa
  41. Indícios para Refatoração ✔ Código duplicado ✔ Método longo ✔

    Classe grande ✔ Lista de parâmetros longa ✔ Má identação
  42. Indícios para Refatoração ✔ Código duplicado ✔ Método longo ✔

    Classe grande ✔ Lista de parâmetros longa ✔ Má identação ✔ Geralmente qualquer coisa que dificulta a legibilidade do código
  43. Técnicas de Refatoração

  44. Técnicas de Refatoração POO

  45. Técnicas de Refatoração POO?!

  46. Técnicas de Refatoração

  47. Técnicas de Refatoração ✔ Extrair Método (Extract Method)

  48. Técnicas de Refatoração ✔ Extrair Método (Extract Method) ✔ Mover

    Método (Move Method)
  49. Técnicas de Refatoração ✔ Extrair Método (Extract Method) ✔ Mover

    Método (Move Method) ✔ Mover Atributo (Move Field)
  50. Técnicas de Refatoração ✔ Extrair Método (Extract Method) ✔ Mover

    Método (Move Method) ✔ Mover Atributo (Move Field) ✔ Extrair Classe (Extract Class)
  51. Técnicas de Refatoração ✔ Extrair Método (Extract Method) ✔ Mover

    Método (Move Method) ✔ Mover Atributo (Move Field) ✔ Extrair Classe (Extract Class) ✔ Encapsular Atributo (Encapsulate Field)
  52. Técnicas de Refatoração ✔ Extrair Método (Extract Method) ✔ Mover

    Método (Move Method) ✔ Mover Atributo (Move Field) ✔ Extrair Classe (Extract Class) ✔ Encapsular Atributo (Encapsulate Field) ✔ Renomear Método (Rename Method)
  53. Técnicas de Refatoração

  54. Técnicas de Refatoração ✔ Subir Método (Pull Up Method)

  55. Técnicas de Refatoração ✔ Subir Método (Pull Up Method) ✔

    Subir Atributo (Pull Up Field)
  56. Técnicas de Refatoração ✔ Subir Método (Pull Up Method) ✔

    Subir Atributo (Pull Up Field) ✔ Descer Método (Push Down Method)
  57. Técnicas de Refatoração ✔ Subir Método (Pull Up Method) ✔

    Subir Atributo (Pull Up Field) ✔ Descer Método (Push Down Method) ✔ Descer Atributo (Push Down Field)
  58. Técnicas de Refatoração ✔ Subir Método (Pull Up Method) ✔

    Subir Atributo (Pull Up Field) ✔ Descer Método (Push Down Method) ✔ Descer Atributo (Push Down Field) ✔ Extrair Sub-classe (Extract Subclass)
  59. Técnicas de Refatoração ✔ Subir Método (Pull Up Method) ✔

    Subir Atributo (Pull Up Field) ✔ Descer Método (Push Down Method) ✔ Descer Atributo (Push Down Field) ✔ Extrair Sub-classe (Extract Subclass) ✔ Extrair Super-classe (Extract Superclass)
  60. Técnicas de Refatoração

  61. Técnicas de Refatoração Padrões de Projeto

  62. Técnicas de Refatoração Ainda não conhece ou não usa?!

  63. Técnicas de Refatoração Pois, deveria!

  64. Padrões de Projeto “Soluções gerais para um problema que ocorre

    com frequência dentro de um determinado contexto no projeto de software.” Wikipedia
  65. Componentes Symfony

  66. Componentes Symfony Implementam funcionalidades comuns necessárias para desenvolver websites.

  67. Componentes Symfony Testados e usados largamente pela comunidade em uma

    infinidade de projetos.
  68. Componentes Symfony

  69. Componentes Symfony Testados e usados largamente pela comunidade em uma

    infinidade de projetos.
  70. Componentes Symfony

  71. Componentes Symfony Possuem pouca ou nenhuma dependência.

  72. Componentes Symfony

  73. Componentes Symfony Requisitos?!

  74. Componentes Symfony Você está usando o Composer, não está?!

  75. Componentes Symfony

  76. Componentes Symfony Adicione o componente como requisito…

  77. Componentes Symfony composer require symfony/<componente>

  78. Componentes Symfony Siga a documentação…

  79. Componentes Symfony E seja feliz!

  80. Exemplo: Finder

  81. Exemplo: Finder composer require symfony/finder

  82. Exemplo: Finder // Inclui o autoloader require __DIR__ . '/vendor/autoload.php';

  83. Exemplo: Finder use Symfony\Component\Finder\Finder; // Instancia o finder $finder =

    new Finder();
  84. Exemplo: Finder // Encontra todos os arquivos no diretório atual

    $finder->files()->in(__DIR__);
  85. Exemplo: Finder // Verifica se a busca retornou algum resultado

    if ($finder->hasResults()) { // ... }
  86. Exemplo: Finder // Extrai informações dos arquivos retornados foreach ($finder

    as $file) { $absoluteFilePath = $file->getRealPath(); $fileNameWithExtension = $file->getRelativePathname(); // ... }
  87. Exemplo: Templating

  88. Exemplo: Templating composer require symfony/templating

  89. Exemplo: Templating use Symfony\Component\Templating\Loader\FilesystemLoad er; use Symfony\Component\Templating\PhpEngine; use Symfony\Component\Templating\TemplateNameParser;

  90. Exemplo: Templating // Cria um loader que lê templates a

    partir do sistema de // arquivos $filesystemLoader = new FilesystemLoader( __DIR__ . '/views/%name%' );
  91. Exemplo: Templating // Cria a engine, ponto de entrada do

    componente // usando um parser de templates e o loader $templating = new PhpEngine( new TemplateNameParser(), $filesystemLoader );
  92. Exemplo: Templating // Analisa o template "hello.php" e retorna a

    string de saída // O array contém variáveis usadas no template echo $templating->render( 'Hello.php', [ 'firstname' => 'Fabien' ] );
  93. Exemplo: Templating // views/hello.php Hello, <?= $firstname ?>!

  94. Exemplo: Console

  95. Exemplo: Console composer require symfony/console

  96. Exemplo: Console use Symfony\Component\Console\Application; // Cria a aplicação $application =

    new Application();
  97. Exemplo: Console use App\Command\CreateUserCommand; // Registra os comandos $application->add(new CreateUserCommand());

  98. Exemplo: Console // Roda a aplicação $application->run();

  99. Exemplo: Command namespace App\Command; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface;

  100. Exemplo: Command class CreateUserCommand extends Command { // ... }

  101. Exemplo: Command // O nome do comando, usado ao chamar

    a aplicação // na linha de comando protected static $defaultName = 'app:create-user';
  102. Exemplo: Command // Configura o comando. // Define opções, parâmetros,

    flags, etc. protected function configure() { // ... }
  103. Exemplo: Command // Define os passos executados pelo comando. protected

    function execute(InputInterface $input, OutputInterface $output) { // ... }
  104. Outros Componentes... Achou pouco?!

  105. Outros Componentes... Ainda tem mais de 40...

  106. Outros Componentes... Divirta-se!! :D

  107. Revisando...

  108. Revisando... 1. Conheça a sua aplicação.

  109. Revisando... 1. Conheça a sua aplicação. 2. Conheça o contexto

    em que ela se encontra.
  110. Revisando... 1. Conheça a sua aplicação. 2. Conheça o contexto

    em que ela se encontra. 3. Use conceitos básicos de POO para preparar o terreno para modificações mais amplas.
  111. Revisando... 1. Conheça a sua aplicação. 2. Conheça o contexto

    em que ela se encontra. 3. Use conceitos básicos de POO para preparar o terreno para modificações mais amplas. 4. Refatore de forma incremental e consistente.
  112. Revisando... 1. Conheça a sua aplicação. 2. Conheça o contexto

    em que ela se encontra. 3. Use conceitos básicos de POO para preparar o terreno para modificações mais amplas. 4. Refatore de forma incremental e consistente. 5. Aplique padrões de projeto onde for pertinente.
  113. Revisando... 1. Conheça a sua aplicação. 2. Conheça o contexto

    em que ela se encontra. 3. Use conceitos básicos de POO para preparar o terreno para modificações mais amplas. 4. Refatore de forma incremental e consistente. 5. Aplique padrões de projeto onde for pertinente. 6. Não reinvente a roda. Use os Componentes do Symfony onde for pertinente.
  114. Revisando... Por último, mas não menos importante...

  115. Revisando... Use diferentes formas de testes para ter segurança na

    refatoração.
  116. Links ✔ https://pt.wikipedia.org/wiki/Refatora%C3%A7% C3%A3o ✔ https://pt.wikipedia.org/wiki/Padr%C3%A3o_de_ projeto_de_software ✔ https://symfony.com/doc/current/components/i ndex.html

    ✔ https://github.com/adielcristo/phpconbr-2019-s ymfony
  117. Links ✔ Working Effectively with Legacy Code, Michael Feathers

  118. Links ✔ Refactoring, Martin Fowler

  119. Links ✔ https://github.com/adielcristo ✔ https://twitter.com/adielcristo ✔ https://speakerdeck.com/adielcristo ✔ https://www.adielcristo.com ✔

    https://adiel.dev ✔ https://phpba.com.br Obrigado!!
  120. Links