Upload
mauro-george
View
560
Download
4
Embed Size (px)
DESCRIPTION
Saiba como não deixar seu model virar um ameaçador Colosso. Vídeo da palestra em https://www.eventials.com/pt-br/helabs/model-of-the-colossus/
Citation preview
Model of the Colossus
@maurogeorgemaurogeorge.github.comaprenderphp.com.br
Mauro George
Seu model, um grande colosso
Mas por que isto acontece?
Um pouco de história
Rails 15 minutes blog
Começamos bem
Começamos bem
MVC
Começamos bem
Rails way
Começamos bem
Migração de outras linguagens direto para o RailsDesde que mude o mindset
Inicia a confusão para novatos
2 Stacks
Inicia a confusão para novatos
37 Signals stackERB for view templatesMySQL for databasesMiniTest for testingFat Models, Skinny Controllers
Inicia a confusão para novatos
Prime stackHaml for view templatesPostgreSQL for databasesRspec/Cucumber for testingSkinny models, controllers, and a service layer
AR quebra o SRP
Alto acoplamento - Callback - Observer - Finders
Falta de coesão - Salva - Envia e-mail - Posta no Facebook
Anti-patternModel gerando conteúdo para view
SoluçãoDecorator & Presenter
SoluçãoDecorator
Para quando lidamos com apenas uma entidade
Anti-pattern
Solução
app/decorators/user_decorator.rb
Solução
SoluçãoPresenter
Para quando lidamos com N entidades
Anti-pattern
Método de Post ou User?
Solução
app/presenters/writter_post_presenter.rb
Solução
SoluçãoPrefira esta abordagem a helpers
Helpers são procedurais
Anti-patternModel Callbacks
Anti-pattern
SoluçãoService
Solução
app/services/post_notify_users_service.rb
Solução
Anti-patternModel Salvando N models
Anti-pattern
SoluçãoForm Object
Solução
lib/active_model/model.rb
Já vem no rails 4
Gem active_attr
Gem virtus
Solução
app/models/user_with_post.rb
Model nem sembre herda de AR
Solução
ActiveSupport::ConcernsPrefira as abordagem utilizando POROsActiveSupport::Concerns taca tudo para
debaixo dos panos
Bad SmellsMeu Model está virando um Colosso?
Bad SmellsDiversos métodos com nome de outra
entidade
Bad SmellsN métodos recebendo o mesmo paramêtro
N métodos privados que são usados em apenas um método
Bad Smells
Classe gigante(Provavelmente uma God Class)
Prefira N classes pequenas
Bad Smells
Pro FuturoDCI
Crie classes
Quebre Model e Classes grandes em classes menores
Classes que façam apenas uma coisa bem feita
Conclusão
@maurogeorgemaurogeorge.github.comaprenderphp.com.br
Mauro George
Referênciashttp://rubyweekly.com/archive/124.htmlhttp://rubyweekly.com/archive/126.htmlhttp://robots.thoughtbot.com/post/14825364877/evaluating-alternative-decorator-implementations-inhttp://mikepackdev.com/blog_posts/31-exhibit-vs-presentersamuelmullen.com/2013/05/the-problem-with-rails-callbackshttp://blog.codeclimate.com/blog/2012/10/17/7-ways-to-decompose-fat-activerecord-models/http://rubysource.com/ddd-for-rails-developers-part-1-layered-architecture/http://blog.plataformatec.com.br/2012/03/barebone-models-to-use-with-actionpack-in-rails-4-0/http://www.youtube.com/watch?v=DC-pQPq0acs