Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
[RubyConfBR 2017] Refatorando Rails apps com co...
Search
Flavia Fortes
November 17, 2017
230
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
[RubyConfBR 2017] Refatorando Rails apps com confiança
Flavia Fortes
November 17, 2017
More Decks by Flavia Fortes
See All by Flavia Fortes
[RubyConfBR 2017] Elixir/Elug - Flavia Fortes e Charlotte Oliveira
flaviafortes
0
160
[Women Dev Summit 2017] Introdução ao framework Phoenix
flaviafortes
0
120
[Rails Girls SP 2017] Lógica de programação com Ruby
flaviafortes
0
180
[RubyConf 2016] Como funciona o Rails
flaviafortes
1
260
[RubyConf 2015] Learn From My Mistakes
flaviafortes
6
1k
Featured
See All Featured
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
3
4.3k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
390
What does AI have to do with Human Rights?
axbom
PRO
1
2.4k
Optimizing for Happiness
mojombo
378
71k
Accessibility Awareness
sabderemane
1
220
Site-Speed That Sticks
csswizardry
13
1.5k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
560
Rails Girls Zürich Keynote
gr2m
96
14k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
440
Joys of Absence: A Defence of Solitary Play
codingconduct
1
530
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.2k
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!