Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

Adiel Cristo
December 07, 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.

Adiel Cristo

December 07, 2019
Tweet

More Decks by Adiel Cristo

Other Decks in Programming

Transcript

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

    a estrutura interna do código sem alterar seu comportamento externo.” Wikipedia
  2. Indícios para Refatoração ✔ Código duplicado ✔ Método longo ✔

    Classe grande ✔ Lista de parâmetros longa ✔ Má identação
  3. 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
  4. Técnicas de Refatoração ✔ Extrair Método (Extract Method) ✔ Mover

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

    Método (Move Method) ✔ Mover Atributo (Move Field) ✔ Extrair Classe (Extract Class)
  6. 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)
  7. 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)
  8. Técnicas de Refatoração ✔ Subir Método (Pull Up Method) ✔

    Subir Atributo (Pull Up Field) ✔ Descer Método (Push Down Method)
  9. 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)
  10. 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)
  11. 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)
  12. 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
  13. Exemplo: Finder // Extrai informações dos arquivos retornados foreach ($finder

    as $file) { $absoluteFilePath = $file->getRealPath(); $fileNameWithExtension = $file->getRelativePathname(); // ... }
  14. Exemplo: Templating // Cria um loader que lê templates a

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

    componente // usando um parser de templates e o loader $templating = new PhpEngine( new TemplateNameParser(), $filesystemLoader );
  16. 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' ] );
  17. Exemplo: Command // O nome do comando, usado ao chamar

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

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

    function execute(InputInterface $input, OutputInterface $output) { // ... }
  20. 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.
  21. 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.
  22. 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.
  23. 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.