Separando as regras de negócio do Rails
Celso Crivelaro@celsocrivelaro
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?
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
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
ORM
Regras de preenchimento
Quanto menos regras de negócio melhor
Evite usar callbacks
Regras de Consulta
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
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
Estude muito OO
Estude arquitetura OO
Desacople o seu código
Tente fazer algo sem o Rails
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