Fazendo as pazes com o legado<br />dicas, técnicas e experiências<br />Refactoring!<br />
Legacycode<br />Michael Feathers, Working Effectively with Legacy Code:<br />“Code without tests”<br />
Legacycode<br />“Aplicações que estão em produção e que não recebem novas features e tem baixa manutenção, apenas bugs gra...
Greenfield<br />
E se...<br />Aplicação está em produção,<br />Implementação constantes de novas funcionalidades,<br />Correções de bugs,<b...
O código é ruim,<br />Difícil de dar manutenção,<br />Ambiente não confiável,<br />Afeta até mesmo a moral do time...?<br />
Brownfield<br />
dicas, técnicas e experiências<br />Brownfieldapplications<br />
Eu sou<br />Emmanuel G. Brandão,<br />32 anos,<br />Programador humano,<br />egomesbrandao{twitter, msn, gtalk, blog, site...
Brownfieldapp’s<br />
Você entra para a equipe, dia 1<br />Acessa o VCS, baixa o código<br />Compila e... erro, falta framework!<br />Instala, ....
Problemas<br />SRP não é respeitado nem nas camadas,<br />Acesso a dados problemático,<br />O código é ininteligível,<br /...
Bases da mudança<br />
Controle de versão (VCS)<br />
Alteração do código<br />
ecosistema<br />Controle de versão<br />Integração contínua<br />Testes automatizados<br />Métricas<br />Controle de bugs<...
Bases da mudança<br />
Um pouco sobre código<br />Conheça fundamentos (OO, Funcional, ...)<br />SOLID (SRP, OCP,...,DI )<br />Adote: KISS, YAGNI,...
Camadas são polêmicas<br />Tier: mais ligada ao hardware que roda (UI no cliente, middleware no server, ...)<br />Layer: S...
anti-corruptionlayer<br />Implementação do design pattern: Adapter<br />Isola problemas com dependência de frameworks de t...
Vertical layer<br />Log<br />Veja AOP<br />Case<br />
Refactoringlayers<br />
Use tatft<br />Para ter certeza de que tudo continua funcionando:<br />“Test All The Fucking Time”<br />Bryan Liles<br />
Testes: leitura<br />Workingeffectivewithlegacycode, Michael Feathers, tem vários cenários de teste<br />Método monstro<br...
Bases da mudança<br />
Dependenceinjection<br />DependenceInjection (DI)<br />InversionofControl (IoC)<br />Service locator<br />
Objetivo<br />Desacoplar...<br />...te força a trabalhar com Interfaces...<br />... ajuda com testes<br />
Bases da mudança<br />
UI<br />Desacople<br />SRP<br />Patterns (MVC, MVVM, ...)<br />
Bases da mudança<br />
Refactoring acesso a dados<br />Isole o acesso a dados em um layer (DAL),<br />Se não precisar de Transações não coloque! ...
ORM<br />Deixe o acesso de dado no automático,<br />Não crie, use um pronto... Ou compre!<br />Coopere com o DBA! “Dados p...
Banco de dados<br />Faz parte da sua app, certo?<br />Você versiona? Como?<br />É fácil de refazer? É feito no deploy de t...
Uma nova idéia: CQRS, próxima palestra!<br />
Bases da mudança<br />
manter<br />
Inspeção e adaptação...<br />"Não se iluda em terminar um projeto, um projeto de software só acaba quando o programa é del...
Obrigado!<br />
Próximos SlideShares
Carregando em…5
×

Brownfield applications: dicas, técnicas e experiências

1.248 visualizações

Publicada em

Dicas, técnicas e experiências para lidar com aplicações Brownfield

Publicada em: Tecnologia, Esportes
0 comentários
3 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
1.248
No SlideShare
0
A partir de incorporações
0
Número de incorporações
10
Ações
Compartilhamentos
0
Downloads
2
Comentários
0
Gostaram
3
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Brownfield applications: dicas, técnicas e experiências

  1. 1. Fazendo as pazes com o legado<br />dicas, técnicas e experiências<br />Refactoring!<br />
  2. 2. Legacycode<br />Michael Feathers, Working Effectively with Legacy Code:<br />“Code without tests”<br />
  3. 3. Legacycode<br />“Aplicações que estão em produção e que não recebem novas features e tem baixa manutenção, apenas bugs graves”<br />
  4. 4. Greenfield<br />
  5. 5. E se...<br />Aplicação está em produção,<br />Implementação constantes de novas funcionalidades,<br />Correções de bugs,<br />Mas...<br />
  6. 6. O código é ruim,<br />Difícil de dar manutenção,<br />Ambiente não confiável,<br />Afeta até mesmo a moral do time...?<br />
  7. 7. Brownfield<br />
  8. 8. dicas, técnicas e experiências<br />Brownfieldapplications<br />
  9. 9. Eu sou<br />Emmanuel G. Brandão,<br />32 anos,<br />Programador humano,<br />egomesbrandao{twitter, msn, gtalk, blog, site, e-mail, facebook, ...}<br />
  10. 10. Brownfieldapp’s<br />
  11. 11. Você entra para a equipe, dia 1<br />Acessa o VCS, baixa o código<br />Compila e... erro, falta framework!<br />Instala, ... Erro! Falta arquivo.config<br />Compila... Erro! Configuração errada<br />
  12. 12. Problemas<br />SRP não é respeitado nem nas camadas,<br />Acesso a dados problemático,<br />O código é ininteligível,<br />Práticas comuns não são usadas,<br />Se OO é procedural, se funcional é OO,<br />Incerteza é uma constante<br />
  13. 13. Bases da mudança<br />
  14. 14. Controle de versão (VCS)<br />
  15. 15. Alteração do código<br />
  16. 16. ecosistema<br />Controle de versão<br />Integração contínua<br />Testes automatizados<br />Métricas<br />Controle de bugs<br />
  17. 17. Bases da mudança<br />
  18. 18. Um pouco sobre código<br />Conheça fundamentos (OO, Funcional, ...)<br />SOLID (SRP, OCP,...,DI )<br />Adote: KISS, YAGNI, DRY<br />
  19. 19. Camadas são polêmicas<br />Tier: mais ligada ao hardware que roda (UI no cliente, middleware no server, ...)<br />Layer: Separação lógica (validação, lógica de negócios, ...)<br />
  20. 20.
  21. 21.
  22. 22.
  23. 23. anti-corruptionlayer<br />Implementação do design pattern: Adapter<br />Isola problemas com dependência de frameworks de terceiros ou sistemas<br />
  24. 24. Vertical layer<br />Log<br />Veja AOP<br />Case<br />
  25. 25. Refactoringlayers<br />
  26. 26.
  27. 27.
  28. 28.
  29. 29. Use tatft<br />Para ter certeza de que tudo continua funcionando:<br />“Test All The Fucking Time”<br />Bryan Liles<br />
  30. 30. Testes: leitura<br />Workingeffectivewithlegacycode, Michael Feathers, tem vários cenários de teste<br />Método monstro<br />Código alienígina<br />
  31. 31.
  32. 32. Bases da mudança<br />
  33. 33. Dependenceinjection<br />DependenceInjection (DI)<br />InversionofControl (IoC)<br />Service locator<br />
  34. 34. Objetivo<br />Desacoplar...<br />...te força a trabalhar com Interfaces...<br />... ajuda com testes<br />
  35. 35. Bases da mudança<br />
  36. 36. UI<br />Desacople<br />SRP<br />Patterns (MVC, MVVM, ...)<br />
  37. 37. Bases da mudança<br />
  38. 38.
  39. 39.
  40. 40. Refactoring acesso a dados<br />Isole o acesso a dados em um layer (DAL),<br />Se não precisar de Transações não coloque! Lembre-se YAGNI,<br />Otimização prematura de performance não é uma boa idéia,<br />Refactoring de IF’s em SP’sé fácil, joins, aggregations é difícil, o que é lógica e o que é CRUD,<br />
  41. 41. ORM<br />Deixe o acesso de dado no automático,<br />Não crie, use um pronto... Ou compre!<br />Coopere com o DBA! “Dados pertencem a organização e não a sua aplicação”<br />
  42. 42. Banco de dados<br />Faz parte da sua app, certo?<br />Você versiona? Como?<br />É fácil de refazer? É feito no deploy de teste? <br />Use: Migrations<br />
  43. 43. Uma nova idéia: CQRS, próxima palestra!<br />
  44. 44. Bases da mudança<br />
  45. 45. manter<br />
  46. 46. Inspeção e adaptação...<br />"Não se iluda em terminar um projeto, um projeto de software só acaba quando o programa é deletado dos computadores definitivamente e sai de uso, o código-fonte é apagado e todos os programadores são mortos.“<br />Ted Neward<br />
  47. 47.
  48. 48. Obrigado!<br />

×