o que aprendi e quero passar adiante - dev in sampa 2010

Post on 19-Jan-2015

1.336 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

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

top related