Apresentação
Pós – Graduando em Engenharia de Software pela InfNet/FGV
Graduado em Analise e Desenvolvimento de Sistemas pela FTECBrasil
Desenvolvedor Java
Desenvolvedor PHP
Scrum Master
PO - Product Owner
Blog: joleques.blogspot.com.br
Twitter: @jorgeoleques
GitHub : github.com/joleques
Email : [email protected]
Sumario
Introdução
Fatores de Risco
Sinais
Transição
Pilares Para Transição
Teste de Unidade
Refactory
Padrões GRASP
Exemplos e Discussão
Conclusão
“Quando um software traz consigo um comportamento complexo e é desprovido de um bom design, torna-se difícil refatorar ou combinar elementos. Começam a aparecer duplicações a partir do momento em que o desenvolvedor não mostra confiança em prever todas as implicações de uma mudança”.(Erick Evans, 2010,DDD 2ºEd)
Introdução
Fatores de Risco
Regras de Negócio espalhada
Código Ruim
Domínio mal modelado
Falta da Linguagem Única
Problemas na OO
Sinais
1. Corpo
Sensação de pressão no peitoSuor frio e intensoDesconforto acompanhado de tontura Desmaio Náuseas Falta de ar
Sinais
2. Software
Manutenção difícilCódigo duplicado Método longo Classe grande Lista de parâmetros longaCódigo difícil de entenderDificuldade de adicionar novas funcionalidades
Transição
Escrever código que possa ser entendido e executado por uma máquina é fácil, todavia escrever código que possa ser lido e entendido por humanos é bem mais complexo (Joshua Kerievsky)
Teste de Unidade
“ Para refatorar, o primeiro passo é sempre o mesmo. Eu preciso construir um conjunto sólido de testes para cada sessão do código...”
“...eu sou humano e ainda cometo erros. Então, eu preciso de testes sólidos.”
Martin Fowler, 1999
Maior qualidade do código
Diminuição dos BUGs
Orientação na criação do modelo
Maior cobertura do código
Benefícios do TDD
Refactory
“Devido à dificuldade para se manter um código considerado ruim, um cronograma de entrega de um produto poderá atrasar em vista do tempo extra que será necessário para realizar a tarefa de alteração no código.”(MARTIN, 2009).
Tipos 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)
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)
Padrões GRASP (General Responsibility Assignment Software Pattern)
"Entender responsabilidades é essencial para o bom projeto orientado a objetos". (Martin Fowler)
GRASP
Princípios Fundamentais para a Atribuição de Responsabilidades em projetos OO
Qualidade
Não sobrecarregar Objetos
Padrões GRASP
Especialista da Informação
Criador
Alta Coesão
Baixo Acoplamento
Controler
Polimorfismo
Invenção Pura
Indireção
Variações Protegidas
Exemplos e Discussão
Quem ama a prática sem teoria é como um marinheiro navegando sem os lemes e sem bussola, não sabendo assim nunca onde vai chegar..(Leonardo da Vinci)
Especialista da Informação
Alta Coesão
Baixo Acoplamento
Problema: Dado que exista pelo menos uma vaga nas salas da prova escolhida pelo candidato, quando o candidato realizar a inscrição, então o candidato deve ser inserido na sala e a inscrição realizada.
Exemplos e Discussão - Expert
3. Refactory
Extrair Método (Extract Method)
Mover Método (Move Method)
Renomear Método (Rename Method)
Exemplos e Discussão - Expert
Diminuição das dependências
Flexibilidade do Código
Código Limpo e Claro
5. Análise
Exemplos e Discussão - Expert
Problema: Dado que eu saiba o tipo de fase, Quando eu listar as Provas ou os Candidatos, Então o sistema pode apresentar as provas para o candidato escolher ou montar relatório com os candidatos
Exemplos e Discussão - Variação Protegida
Variação Protegida
Polimorfismo
Extrair Classe (Extract Class)
Extrair Super-classe (Extract Superclass)
Descer Método (Push Down Method)
3. Refactory
Exemplos e Discussão - Variação Protegida
Diminuição das dependências
Flexibilidade do Código
Diminuição da Complexidade
Código Limpo e Claro
5. Análise
Exemplos e Discussão - Variação Protegida
Extrair Classe (Extract Class)
Extrair Método (Extract Method)
3. Refactory
Exemplos e Discussão – Invenção Pura
Diminuição das dependências
Manutenção Simples
Código Limpo e Claro
5. Análise
Exemplos e Discussão – Invenção Pura
Diminuição das dependências
Manutenção Simples
Código Limpo e Claro
5. Análise
Exemplos e Discussão – Invenção Pura
Conclusão
Diminuição das dependências
Manutenção Simples
Código Limpo e Claro
Flexibilidade do Código
Diminuição da Complexidade
Obrigado
Blog: joleques.blogspot.com.br
Twitter: @jorgeoleques
GitHub : github.com/joleques
Email : [email protected]
Recommended