tdc2016sp - desacoplando suas regras de negócio do rails

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

Upload: tdc-globalcode

Post on 20-Mar-2017

75 views

Category:

Education


3 download

TRANSCRIPT

Page 1: TDC2016SP - Desacoplando suas regras de negócio do Rails

Separando as regras de negócio do Rails

Celso Crivelaro@celsocrivelaro

Page 2: TDC2016SP - Desacoplando suas regras de negócio do Rails

DEVELOPER @

Page 3: TDC2016SP - Desacoplando suas regras de negócio do Rails
Page 4: TDC2016SP - Desacoplando suas regras de negócio do Rails

Rails revolucionou frameworks MVC

Page 5: TDC2016SP - Desacoplando suas regras de negócio do Rails

Convenção sobre Configuração

Muitos plugins / gems

Documentação

Baixo tempo para subir um projeto

Page 6: TDC2016SP - Desacoplando suas regras de negócio do Rails

Mas não são todos que

concordam...

Page 7: TDC2016SP - Desacoplando suas regras de negócio do Rails
Page 8: TDC2016SP - Desacoplando suas regras de negócio do Rails
Page 9: TDC2016SP - Desacoplando suas regras de negócio do Rails

Onde está o problema?

Page 10: TDC2016SP - Desacoplando suas regras de negócio do Rails

Sua App não é o Rails

Page 11: TDC2016SP - Desacoplando suas regras de negócio do Rails
Page 12: TDC2016SP - Desacoplando suas regras de negócio do Rails

Controller

Model

View

Page 13: TDC2016SP - Desacoplando suas regras de negócio do Rails

View não é só HTML

Page 14: TDC2016SP - Desacoplando suas regras de negócio do Rails

Model não é ActiveRecord

Page 15: TDC2016SP - Desacoplando suas regras de negócio do Rails

Comunidade Ruby se preocupa

pouco com Arquitetura OO

Page 16: TDC2016SP - Desacoplando suas regras de negócio do Rails

account.rb 439 linhas

account_spec.rb 1045 linhas

Page 17: TDC2016SP - Desacoplando suas regras de negócio do Rails

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

Page 18: TDC2016SP - Desacoplando suas regras de negócio do Rails

Como podemos desacoplar?

Page 19: TDC2016SP - Desacoplando suas regras de negócio do Rails

Views

Page 20: TDC2016SP - Desacoplando suas regras de negócio do Rails

Entrada de dados

Page 21: TDC2016SP - Desacoplando suas regras de negócio do Rails

controllers/users_controller.rb

views/users/new.html.erb

Page 22: TDC2016SP - Desacoplando suas regras de negócio do Rails

controllers/users_controller.rb

Page 23: TDC2016SP - Desacoplando suas regras de negócio do Rails

Fácilmas problemático

Page 24: TDC2016SP - Desacoplando suas regras de negócio do Rails

Cadastro em passos

Formulário preenche vários modelos

Diferentes interfaces: Web + API

Page 25: TDC2016SP - Desacoplando suas regras de negócio do Rails

https://gist.github.com/peternixey/1978249

Mass Assignment => Strong Parameters

Page 26: TDC2016SP - Desacoplando suas regras de negócio do Rails

Form Objects

Page 27: TDC2016SP - Desacoplando suas regras de negócio do Rails

forms/user_form.rb

Page 28: TDC2016SP - Desacoplando suas regras de negócio do Rails

controllers/users_controllers.rb

Page 29: TDC2016SP - Desacoplando suas regras de negócio do Rails

Exibição de dados

Page 30: TDC2016SP - Desacoplando suas regras de negócio do Rails

Presenter Objects

Page 31: TDC2016SP - Desacoplando suas regras de negócio do Rails

controllers/users_controllers.rb

presenters/user_show_presenter.rb views/users/show.erb.html

Page 32: TDC2016SP - Desacoplando suas regras de negócio do Rails

Mock nos testes

Favorece Duck-typing

Page 33: TDC2016SP - Desacoplando suas regras de negócio do Rails

Models

Page 34: TDC2016SP - Desacoplando suas regras de negócio do Rails

ActiveRecord

Page 35: TDC2016SP - Desacoplando suas regras de negócio do Rails

ORM

Regras de preenchimento

Quanto menos regras de negócio melhor

Page 36: TDC2016SP - Desacoplando suas regras de negócio do Rails

Evite usar callbacks

Page 37: TDC2016SP - Desacoplando suas regras de negócio do Rails

Regras de Consulta

Page 38: TDC2016SP - Desacoplando suas regras de negócio do Rails

Policy Objects

Page 39: TDC2016SP - Desacoplando suas regras de negócio do Rails

Tem sentido levar estes métodos para todo lado?

Métodos de checagem / permissionamento

Page 40: TDC2016SP - Desacoplando suas regras de negócio do Rails

policies/user_policy.rb

Page 41: TDC2016SP - Desacoplando suas regras de negócio do Rails

http://ruby-doc.org/stdlib-2.3.0/libdoc/forwardable/rdoc/Forwardable.html

Page 42: TDC2016SP - Desacoplando suas regras de negócio do Rails

Regras de Ação

Page 43: TDC2016SP - Desacoplando suas regras de negócio do Rails

Service Objects

Page 44: TDC2016SP - Desacoplando suas regras de negócio do Rails

Métodos de ação

Usa vários modelos

Lógica de negócio complexa

Usa várias integrações

Page 45: TDC2016SP - Desacoplando suas regras de negócio do Rails

services/user_billing_service.rb

Page 46: TDC2016SP - Desacoplando suas regras de negócio do Rails

Invocando alguns Design Patterns

Page 47: TDC2016SP - Desacoplando suas regras de negócio do Rails

Pipeline /Chain of

Responsibility

Page 48: TDC2016SP - Desacoplando suas regras de negócio do Rails
Page 49: TDC2016SP - Desacoplando suas regras de negócio do Rails

Strategy

Page 50: TDC2016SP - Desacoplando suas regras de negócio do Rails
Page 51: TDC2016SP - Desacoplando suas regras de negócio do Rails

Dicas Finais

Page 52: TDC2016SP - Desacoplando suas regras de negócio do Rails

Estude muito OO

Estude arquitetura OO

Desacople o seu código

Tente fazer algo sem o Rails

Page 53: TDC2016SP - Desacoplando suas regras de negócio do Rails

Referências

Page 54: TDC2016SP - Desacoplando suas regras de negócio do Rails

http://solnic.eu/2016/05/22/my-time-with-rails-is-up.html

Page 55: TDC2016SP - Desacoplando suas regras de negócio do Rails

http://blog.codeclimate.com/blog/2012/10/17/7-ways-to-decompose-fat-activerecord-models/

Page 56: TDC2016SP - Desacoplando suas regras de negócio do Rails
Page 57: TDC2016SP - Desacoplando suas regras de negócio do Rails
Page 58: TDC2016SP - Desacoplando suas regras de negócio do Rails
Page 59: TDC2016SP - Desacoplando suas regras de negócio do Rails
Page 60: TDC2016SP - Desacoplando suas regras de negócio do Rails

Obrigado!

@celsocrivelarohttp://crivelaro.me