Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
[RubyConfBR 2017] Refatorando Rails apps com co...
Search
Flavia Fortes
November 17, 2017
3
210
[RubyConfBR 2017] Refatorando Rails apps com confiança
Flavia Fortes
November 17, 2017
Tweet
Share
More Decks by Flavia Fortes
See All by Flavia Fortes
[RubyConfBR 2017] Elixir/Elug - Flavia Fortes e Charlotte Oliveira
flaviafortes
0
130
[Women Dev Summit 2017] Introdução ao framework Phoenix
flaviafortes
0
100
[Rails Girls SP 2017] Lógica de programação com Ruby
flaviafortes
0
140
[RubyConf 2016] Como funciona o Rails
flaviafortes
1
230
[RubyConf 2015] Learn From My Mistakes
flaviafortes
6
950
Featured
See All Featured
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Designing for humans not robots
tammielis
253
25k
Faster Mobile Websites
deanohume
309
31k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.6k
Scaling GitHub
holman
462
140k
A better future with KSS
kneath
239
17k
Become a Pro
speakerdeck
PRO
29
5.5k
GitHub's CSS Performance
jonrohan
1031
460k
A designer walks into a library…
pauljervisheath
207
24k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
126
53k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.4k
Transcript
Flavia Fortes
None
ESTAMOS CONTRATANDO! http://careers.plataformatec.com.br
Refatorando Rails apps com confiança
1. Quando fazer
1. Quando fazer 2. O que não fazer
1. Quando fazer 2. O que não fazer 3. Um
pouco do que fazer
@flafortes
Quais as motivações?
• Melhorar design do código para facilitar adições e extensões
• Satisfação em deletar código
Vida real • Cobrança por entrega
Vida real • Cobrança por entrega • Projeto com deadline
Vida real • Cobrança por entrega • Projeto com deadline
• Bugs em produção
Vida real • Cobrança por entrega • Projeto com deadline
• Bugs em produção • Problemas de performance
Refatoração reativa
Impactos: • Trabalhoso
Impactos: • Trabalhoso • Demorado
Impactos: • Trabalhoso • Demorado • Difícil de testar
Impactos: • Trabalhoso • Demorado • Difícil de testar •
Pode não entregar valor para o usuário final
Então, como evitar refatoração reativa?
Refatorando sempre, aos poucos, ativamente.
Quais são os sinais do dia-a-dia que me indicam quando
eu preciso refatorar meu código?
Code smells
Métodos muito longos
Métodos com muitos parâmetros
Métodos que usam mais dados de outro objeto (Feature envy)
O que costumamos fazer?
Extraímos lógica para outros métodos menores
Models gigantescos
Muitos testes unitários, suite de testes cada vez maior.
O que não costumamos fazer?
Pensar nas nossas classes com poucos métodos públicos e muitos
métodos privados.
Pensar na nomenclatura da API pública das nossas classes com
carinho.
Código mais legível é menos complexo
Classes gigantes
Classes com muitas propriedades
O que costumamos fazer?
Concerns
"Any application with an app/concerns is concerning."
Composição > Herança
Service Objects
"The wrong object causes more trouble than no object at
all." - Avdi Grimm
Enough with the service objects already https://avdi.codes/service-objects/
O que não costumamos fazer?
Extrair classes ruby puras
Classes de domínio != Classes utilitárias
Single Responsibility Principle
"A class should do the smallest possible thing." - Sandi
Metz
Código complexo nas views
O que costumamos fazer?
Presenters (Decorators)
"Cleaning up view code does not mean hiding it in
another folder."
Thoughts about Rails Presenters https://gist.github.com/somebox/5 a7ebf56e3236372eec4
YAGNI (You ain't gonna need it) • think of better
abstractions? • consider different naming? • maybe you just need a new model?
Código duplicado
DRY Don't Repeat Yourself
Vale lembrar: Em testes, código duplicado não é necessariamente algo
ruim!
Alerta de polêmica: Comentários no código
"Comments are always failures" - Robert C. Martin
Comentários vs Documentação
Queime seus ídolos.
Código morto
O que não costumamos fazer?
Análise estática de código
Evitar metaprogramação
Teste complexo:
Teste complexo: • Setup muito grande
Teste complexo: • Setup muito grande • Muitos stubs
Recapitulando...
Com refatorar melhor?
Estar atento aos sinais (code smells).
Hábito continuo.
Exemplo: Tenho um projeto com uma classe User muito grande.
Meta: Na próxima feature que envolver User, diminuir e não
aumentar a classe User.
Saber aplicação de design patterns != Saber refatorar
Pensamento crítico vale mais que qualquer técnica de refatoração ou
Design Pattern vendido como bala de prata.
"There is no refactoring that is always a great idea.
You always have to say: is this worth it given the components of my system as they are?" - Ben Orenstein
Quero saber mais sobre técnicas de refactoring...
None
Fearless refactoring Rails Controllers http://rails-refactoring.com/
None
Curso: Refactoring Rails - Ben Orenstein http://www.refactoringrails.io/
Obrigada!