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
200
[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
120
[Women Dev Summit 2017] Introdução ao framework Phoenix
flaviafortes
0
96
[Rails Girls SP 2017] Lógica de programação com Ruby
flaviafortes
0
140
[RubyConf 2016] Como funciona o Rails
flaviafortes
1
220
[RubyConf 2015] Learn From My Mistakes
flaviafortes
6
850
Featured
See All Featured
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.1k
Intergalactic Javascript Robots from Outer Space
tanoku
269
27k
The World Runs on Bad Software
bkeepers
PRO
65
11k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Faster Mobile Websites
deanohume
305
30k
Documentation Writing (for coders)
carmenintech
65
4.4k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
Visualization
eitanlees
145
15k
A better future with KSS
kneath
238
17k
Unsuck your backbone
ammeep
668
57k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
44
2.2k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
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!