Download - Refactoring com Padrões de Projeto
REFACTORINGCOMPADRÕESDEPROJETO
REINALDOJR2016
• MestreemEngenhariaElétricaeComputação,Pós-GraduadoemLiderançaeCoaching,GraduadoemCiênciasdaComputação
• Lecionaemcursosdepós-graduação,MBAseGraduação.
• DiretordeProjetosdaempresaINLOCSISTEMAS-Goiânia-GO
• ProfessoreCoordenadordoCursodeSistemasdeInformaçãodaFaculdadeDelta-Goiânia-GO
• +15anoscomprojetosdesoOware|+10anoscomequipesdeprojetosdesoOwae|+9anoscomoprofessoruniversitário
ROTEIRO1. ObjeXvoGeral2. CenárioAtual3. Conceitos4. Observer5. Decorator6. Strategy7. BoasPráXcas
#ÉpossívelConstruirSoftware
Autosustentável?
DEFINIÇÃO“Autosustentável”“Quepodesesustentarsozinho”
“h>ps://pt.wikConary.org/wiki/autosustentável”
DEFINIÇÃO“Autosustentável”“Criar uma estrutura de códigos, queimpacte o menos possível em cadarefactoringrealizado”
“ReinaldoJrJ”
OBJETIVOGERAL
• Apoia-los a implementar códigos,seguindo padrões refinados, ját e s t a d o s e e x p e r im e t a d o s .GaranCndo assim, uma melhorqualidadedecódigoediminuindooimpactodasconstantesmudanças.
OBJETIVOGERAL
#OQUETEIMPEDEDEFAZERISTO?
CENÁRIOATUAL
CENÁRIOATUAL
CENÁRIOATUAL
#EQUALÉORESULTADO?
CENÁRIOATUAL
CENÁRIOATUAL
#DEFINIÇÕES
REFACTORING“Refactoring is a controlled technique forimprovingthedesignofanexis:ngcodebase. Its essence is applying a series ofs m a l l b e h a v i o r - p r e s e r v i n gtransformaCons,eachofwhich"toosmallto be worth doing". However thecumula:ve effect of each of thesetransforma:onsisquitesignificant”
“MarCnFowler”
PADRÃO• Um padrão é uma solução para umdeterminado problema em umcontexto.• Porém um padrão não descrevequalquer solução, mas uma soluçãoque já tenha sido uFlizada comsucessoemmaisdeumcontexto.
PADRÕESDEPROJETO
“Cada padrão descreve um problema nonossoambienteeonúcleoda sua solução,de tal forma que você possa uClizar estasolução mais de ummilhão de vezes, semnuncafazê-lodamesmamaneira”
CristopherAlexander
#QuantomaispadrõeseuuXlizar,melhorvaificaromeucódigo?”
#PADRÕESDEPROJETO
MANTRADEV
BAIXOACOPLAMENTOEALTACOESÃO
PADRÕESDEPROJETO• CreaFonal• Abstraemoprocessodeinstanciaçãodosobjetos
• Strucutural• Sepreocupamcomaformacomoclasseseobjetossãocompostosparaformarestruturasmaiores
• Behavioral• Sepreocupamcomalgoritmoseaatribuiçãoderesponsabilidadesentreobjetos.
OBSERVER“Define uma dependência um-para-muitosentreobjetosdemodoquequandoum objeto muda o estado, todos seusdependentessãonoCficadoseatualizadosautomaCcamente. Permite que objetosinteressados sejamavisados damudançade estado ou outros eventos ocorrendonumoutroobjeto”
ErichGamma
CASE–“BOLSADEVALORES”
OBSERVER
DECORATOR“ D i n a m i c a m e n t e , a g r e g a rresponsabilidadesadicionaisaobjetos.OsDecorators fornecem uma alternaCvaflexível ao uso de subclasses paraextensãodefuncionalidades.”
ErichGamma
CASE-FRETE
DECORATOR
STRATEGY“Definir uma família de algoritmos,encapsular cada uma delas e torna-lasintercambiáveis. Strategy permite que oalgoritmo varie independentemente dosclientesqueouXlizam”
ErichGamma
CASE–“FORMASDEPAGAMENTO”
STRATEGY
STRATEGY
BOASPRÁTICAS
1. Codifiqueorientadoainterfacesenãoaimplementação
2. Evite a herança e favoreça acomposição
3. Obtenha baixo acoplamento e altacoesão
4. UXlizepadrõesdeprojeto5. Nãotenhamedoderefactoring
DICASDELIVRO
DICASDELIVRO
DICASDELIVRO
www.reinaldojr.com