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
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
47
2.1k
Ruby is Unlike a Banana
tanoku
97
11k
Docker and Python
trallard
40
3.1k
We Have a Design System, Now What?
morganepeng
50
7.2k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
25
1.8k
Raft: Consensus for Rubyists
vanstee
136
6.6k
Building Your Own Lightsaber
phodgson
103
6.1k
Measuring & Analyzing Core Web Vitals
bluesmoon
4
120
VelocityConf: Rendering Performance Case Studies
addyosmani
325
24k
10 Git Anti Patterns You Should be Aware of
lemiorhan
654
59k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
4 Signs Your Business is Dying
shpigford
180
21k
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!