Fazendo as pazes com o legadodicas, técnicas e experiênciasRefactoring!
LegacycodeMichael Feathers, Working Effectively with Legacy Code:“Code without tests”
Legacycode“Aplicações que estão em produção e que não recebem novas features e tem baixa manutenção, apenas bugs graves”
Greenfield
E se...Aplicação está em produção,Implementação constantes de novas funcionalidades,Correções de bugs,Mas...
O código é ruim,Difícil de dar manutenção,Ambiente não confiável,Afeta até mesmo a moral do time...?
Brownfield
dicas, técnicas e experiênciasBrownfieldapplications
Eu souEmmanuel G. Brandão,32 anos,Programador humano,egomesbrandao{twitter, msn, gtalk, blog, site, e-mail, facebook, ...}
Brownfieldapp’s
Você entra para a equipe, dia 1Acessa o VCS, baixa o códigoCompila e... erro, falta framework!Instala, ... Erro! Falta arquivo.configCompila... Erro! Configuração errada
ProblemasSRP não é respeitado nem nas camadas,Acesso a dados problemático,O código é ininteligível,Práticas comuns não são usadas,Se OO é procedural, se funcional é OO,Incerteza é uma constante
Bases da mudança
Controle de versão (VCS)
Alteração do código
ecosistemaControle de versãoIntegração contínuaTestes automatizadosMétricasControle de bugs
Bases da mudança
Um pouco sobre códigoConheça fundamentos (OO, Funcional, ...)SOLID (SRP, OCP,...,DI )Adote: KISS, YAGNI, DRY
Camadas são polêmicasTier: mais ligada ao hardware que roda (UI no cliente, middleware no server, ...)Layer: Separação lógica (validação, lógica de negócios, ...)
anti-corruptionlayerImplementação do design pattern: AdapterIsola problemas com dependência de frameworks de terceiros ou sistemas
Vertical layerLogVeja AOPCase
Refactoringlayers
Use tatftPara ter certeza de que tudo continua funcionando:“Test All The Fucking Time”Bryan Liles
Testes: leituraWorkingeffectivewithlegacycode, Michael Feathers, tem vários cenários de testeMétodo monstroCódigo alienígina
Bases da mudança
DependenceinjectionDependenceInjection (DI)InversionofControl (IoC)Service locator
ObjetivoDesacoplar......te força a trabalhar com Interfaces...... ajuda com testes
Bases da mudança
UIDesacopleSRPPatterns (MVC, MVVM, ...)
Bases da mudança
Refactoring acesso a dadosIsole o acesso a dados em um layer (DAL),Se não precisar de Transações não coloque! Lembre-se YAGNI,Otimização prematura de performance não é uma boa idéia,Refactoring de IF’s em SP’sé fácil, joins, aggregations é difícil, o que é lógica e o que é CRUD,
ORMDeixe o acesso de dado no automático,Não crie, use um pronto... Ou compre!Coopere com o DBA! “Dados pertencem a organização e não a sua aplicação”
Banco de dadosFaz parte da sua app, certo?Você versiona? Como?É fácil de refazer? É feito no deploy de teste? Use: Migrations
Uma nova idéia: CQRS, próxima palestra!
Bases da mudança
manter
Inspeção e adaptação..."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.“Ted Neward
Obrigado!

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