Separando as regras de negócio do Rails
Celso Crivelaro@celsocrivelaro
DEVELOPER @
Rails revolucionou frameworks MVC
Convenção sobre Configuração
Muitos plugins / gems
Documentação
Baixo tempo para subir um projeto
Mas não são todos que
concordam...
Onde está o problema?
Sua App não é o Rails
Controller
Model
View
View não é só HTML
Model não é ActiveRecord
Comunidade Ruby se preocupa
pouco com Arquitetura OO
account.rb 439 linhas
account_spec.rb 1045 linhas
Dificuldades no upgrade de versão do Rails
Má arquitetura torna os testes difíceis
Alterações no software são caras
Difícil de dividir a app em várias
Como podemos desacoplar?
Views
Entrada de dados
controllers/users_controller.rb
views/users/new.html.erb
controllers/users_controller.rb
Fácilmas problemático
Cadastro em passos
Formulário preenche vários modelos
Diferentes interfaces: Web + API
https://gist.github.com/peternixey/1978249
Mass Assignment => Strong Parameters
Form Objects
forms/user_form.rb
controllers/users_controllers.rb
Exibição de dados
Presenter Objects
controllers/users_controllers.rb
presenters/user_show_presenter.rb views/users/show.erb.html
Mock nos testes
Favorece Duck-typing
Models
ActiveRecord
ORM
Regras de preenchimento
Quanto menos regras de negócio melhor
Evite usar callbacks
Regras de Consulta
Policy Objects
Tem sentido levar estes métodos para todo lado?
Métodos de checagem / permissionamento
policies/user_policy.rb
http://ruby-doc.org/stdlib-2.3.0/libdoc/forwardable/rdoc/Forwardable.html
Regras de Ação
Service Objects
Métodos de ação
Usa vários modelos
Lógica de negócio complexa
Usa várias integrações
services/user_billing_service.rb
Invocando alguns Design Patterns
Pipeline /Chain of
Responsibility
Strategy
Dicas Finais
Estude muito OO
Estude arquitetura OO
Desacople o seu código
Tente fazer algo sem o Rails
Referências
http://solnic.eu/2016/05/22/my-time-with-rails-is-up.html
http://blog.codeclimate.com/blog/2012/10/17/7-ways-to-decompose-fat-activerecord-models/
Obrigado!
@celsocrivelarohttp://crivelaro.me
Recommended