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
220
3
Share
[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
150
[Women Dev Summit 2017] Introdução ao framework Phoenix
flaviafortes
0
110
[Rails Girls SP 2017] Lógica de programação com Ruby
flaviafortes
0
160
[RubyConf 2016] Como funciona o Rails
flaviafortes
1
240
[RubyConf 2015] Learn From My Mistakes
flaviafortes
6
1k
Featured
See All Featured
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
170
Exploring anti-patterns in Rails
aemeredith
3
320
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
GitHub's CSS Performance
jonrohan
1032
470k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
780
It's Worth the Effort
3n
188
29k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
680
The Cost Of JavaScript in 2023
addyosmani
55
9.9k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
320
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
280
Claude Code のすすめ
schroneko
67
220k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
99
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!