separando a regra de negócios do rails

60
Separando as regras de negócio do Rails Celso Crivelaro @celsocrivelaro

Upload: celso-crivelaro

Post on 13-Apr-2017

101 views

Category:

Technology


0 download

TRANSCRIPT

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