o que aprendi e quero passar adiante - dev in sampa 2010
DESCRIPTION
Apresento nessa palestra técnicas, dicas e truques que aprendi durante mais de 2 anos trabalhando com aplicações Ruby e Rails em produção.TRANSCRIPT
Como ser feliz em apenas 3 passos
O Segredo!
O que aprendi e quero passar adiante
Lucas Húngaro - @lucashungarohttp://busk.com
Parte 1 - Dicas e Truques
Serviços
• Hoptoad
• New Relic
Dicas
• Master/Slave
• Resque pwns Delayed_Job
• Fuja da Amazon (produção)
Plugins e Gems
• kasket
• resque
• oink + hodel_3000_compliant_logger
• bullet
• query_reviewer
• rails_indexes
Plugins e Gems• oink + hodel_3000_compliant_logger
Aug 12 11:31:15 Iron-Man rails[9541]: Memory usage: 101938 | PID: 9541Aug 12 11:31:15 Iron-Man rails[9541]: Instantiation Breakdown: Total: 39 | User: 20 | FeedItem: 10 | Tag: 9
Caching
• Negligenciado
• Difícil em um nível “realista”
• “There are only two hard things in Computer Science: cache invalidation and naming things”
Caching
• Muleta (otimize primeiro)
• Para começar: kasket, cache-money etc
• Se é difícil invalidar, #comofas?
Caching
• Não invalidar!
• Ask for the thing you want
• O Segredo é a chave!
• Ou a chave é o Segredo?
Caching
• Demo
• Smart keys
Parte II - Evoluindo
• Frameworks induzem um bom início
• Comunidade “anêmica”
• Maturidade
Cargo Culting
• Filosofia e relacionamentos na equipe
• Código
Filosofia
• Pressão
• Hype
• Participar de um grupo
• Cool
Pressão
• “Se não usar X, não está fazendo direito”
• A ferramenta certa para o trabalho
• Para quem?
• Ex: Cucumber/Steak
Pressão
• Faca ruim ou técnica ruim?
• Ruim para a equipe
• Eu faço debugging com puts
• “It’s tempting for people to obsess over tools instead of what they’re going to do with those tools”
“The tone is in your fingers”
Código
• Entender o problema
• Não tente resolver o que não te incomoda
• Solução emergente
• “The worst misstep one can make in design is to solve the wrong problem.” – John Carroll
Atacando o “problema” errado
• Demeter: chamar um acessor em outro objeto é o verdadeiro problema?
• NullDB: acessar BD em teste é o verdadeiro problema?
Atacando o “problema” errado
• Demeter
• Replica funcionalidade do delegate (stdlib)
• Problema real é exposição indevida de comportamento
Atacando o “problema” errado
• NullDB
• Problema real é acoplamento da lógica à persistência
• Deve ser possível testar lógica independente da persistência por design
Atacando o problema errado
• Soluções não-eficientes se tornam padrões
It’s evolution baby!
• Fat Controllers
• Skinny Controllers, Fat Models
• Skinny Controllers, Sexy Models, Flexible Services ;)
• Domain-Driven Rails?
Fat Models
• Negócios + Persistência
• Quebra SRP
• CRUD básico: OK
• Excesso de callbacks
• Esconde o domínio
• Falta: flexibilidade, isolamento
Camadas Tudo junto e misturado
Conceitos
• Muito difícil ensinar
• Maturidade através da experiência
• Acoplamento
• Coesão
• “Conascência” (conascence)
Mantra
Se é difícil de testar em isolamento, está mal projetado
Acoplamento
• Serviços
• Inversão de controle
• Injeção de dependência
• Não, não estamos falando de Java! ;)
Acoplamento
• Demo
• ActivityService
• SearchService
Acoplamento
• SOLID, DDD
• Sandi Metz, Jim Weirich, Pat Maddox, James Golick, Cassio Marques
• “Parametrização”
• SRP! SRP! SRP! SRP! SRP! SRP!
• Think about concerns
Conclusão
• Repense “Fat Models”
• Domínios complexos exigem flexibilidade
• Lógica importante deve:
• ser explícita
• ter um nome
• ter uma localização clara
Links
• The Building Blocks of Modularity (ou Grand Unified Theory of Software Design) - http://is.gd/egHfv
• SOLID Ruby - http://is.gd/eeyDn
• Demeter is for Encapsulation - http://is.gd/eeyLx
• Opinionated Modular Code - http://is.gd/eeyXm
• Scaling to Hundreds of Millions of Requests - http://vimeo.com/12814529
Obrigado