Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
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 />
Upcoming SlideShare
Loading in …5
×

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

1,304 views

Published on

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

Published in: Technology, Sports
  • Be the first to comment

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 />

×