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

Saindo do Legado com os Componentes Symfony - P...

Avatar for Adiel Cristo 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.

Avatar for Adiel Cristo

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.