SlideShare uma empresa Scribd logo
1 de 60
Baixar para ler offline
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ácil
mas 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!
@celsocrivelaro
http://crivelaro.me

Mais conteúdo relacionado

Semelhante a Separando a regra de negócios do Rails

Workshop Ruby on Rails dia 2 ruby-pt
Workshop Ruby on Rails dia 2  ruby-ptWorkshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2 ruby-ptPedro Sousa
 
Comtec2010 asp.net mvc
Comtec2010 asp.net mvcComtec2010 asp.net mvc
Comtec2010 asp.net mvcTadeu Matos
 
Treinamento Básico Sobre ASP.NET MVC
Treinamento Básico Sobre ASP.NET MVCTreinamento Básico Sobre ASP.NET MVC
Treinamento Básico Sobre ASP.NET MVCMichael Costa
 
Desenvolvimento web com .NET Core - Meetup São Carlos
Desenvolvimento web com .NET Core - Meetup São CarlosDesenvolvimento web com .NET Core - Meetup São Carlos
Desenvolvimento web com .NET Core - Meetup São CarlosRodolfo Fadino Junior
 
ASP.NET MVC para desenvolvedores Web Forms (TechEd)
ASP.NET MVC para desenvolvedores Web Forms (TechEd)ASP.NET MVC para desenvolvedores Web Forms (TechEd)
ASP.NET MVC para desenvolvedores Web Forms (TechEd)Giovanni Bassi
 
Desenvolvimento RIA com Silverlight 4
Desenvolvimento RIA com Silverlight 4Desenvolvimento RIA com Silverlight 4
Desenvolvimento RIA com Silverlight 4Rodrigo Kono
 
Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Eric Gallardo
 
AAB301 - Rich Internet Application - wcamb
AAB301 - Rich Internet Application - wcambAAB301 - Rich Internet Application - wcamb
AAB301 - Rich Internet Application - wcambMicrosoft Brasil
 
Angular, React ou Vue? Comparando os favoritos do JS reativo
Angular, React ou Vue? Comparando os favoritos do JS reativoAngular, React ou Vue? Comparando os favoritos do JS reativo
Angular, React ou Vue? Comparando os favoritos do JS reativoGDGFoz
 
Workshop soa, microservices e devops
Workshop soa, microservices e devopsWorkshop soa, microservices e devops
Workshop soa, microservices e devopsDiego Pacheco
 
REST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdfREST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdfBrunoAlbuquerque864673
 
REST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdfREST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdfBrunoAlbuquerque864673
 
Indo alem do_mvc_node_js
Indo alem do_mvc_node_jsIndo alem do_mvc_node_js
Indo alem do_mvc_node_jsgustavobeavis
 

Semelhante a Separando a regra de negócios do Rails (20)

Workshop Ruby on Rails dia 2 ruby-pt
Workshop Ruby on Rails dia 2  ruby-ptWorkshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2 ruby-pt
 
Comtec2010 asp.net mvc
Comtec2010 asp.net mvcComtec2010 asp.net mvc
Comtec2010 asp.net mvc
 
Treinamento Básico Sobre ASP.NET MVC
Treinamento Básico Sobre ASP.NET MVCTreinamento Básico Sobre ASP.NET MVC
Treinamento Básico Sobre ASP.NET MVC
 
Desenvolvimento web com .NET Core - Meetup São Carlos
Desenvolvimento web com .NET Core - Meetup São CarlosDesenvolvimento web com .NET Core - Meetup São Carlos
Desenvolvimento web com .NET Core - Meetup São Carlos
 
ASP.NET MVC para desenvolvedores Web Forms (TechEd)
ASP.NET MVC para desenvolvedores Web Forms (TechEd)ASP.NET MVC para desenvolvedores Web Forms (TechEd)
ASP.NET MVC para desenvolvedores Web Forms (TechEd)
 
Desenvolvimento RIA com Silverlight 4
Desenvolvimento RIA com Silverlight 4Desenvolvimento RIA com Silverlight 4
Desenvolvimento RIA com Silverlight 4
 
Docker para devs .NET
Docker para devs .NETDocker para devs .NET
Docker para devs .NET
 
Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Treinamento ASP.NET 2014
Treinamento ASP.NET 2014
 
Conheça o ASP.NET MVC 3
Conheça o ASP.NET MVC 3Conheça o ASP.NET MVC 3
Conheça o ASP.NET MVC 3
 
AAB301 - Rich Internet Application - wcamb
AAB301 - Rich Internet Application - wcambAAB301 - Rich Internet Application - wcamb
AAB301 - Rich Internet Application - wcamb
 
Angular js
Angular jsAngular js
Angular js
 
Palestra ASP.NET MVC
Palestra ASP.NET MVCPalestra ASP.NET MVC
Palestra ASP.NET MVC
 
Angular, React ou Vue? Comparando os favoritos do JS reativo
Angular, React ou Vue? Comparando os favoritos do JS reativoAngular, React ou Vue? Comparando os favoritos do JS reativo
Angular, React ou Vue? Comparando os favoritos do JS reativo
 
Introdução C#
Introdução C#Introdução C#
Introdução C#
 
Workshop soa, microservices e devops
Workshop soa, microservices e devopsWorkshop soa, microservices e devops
Workshop soa, microservices e devops
 
Curso AngularJS - Parte 1
Curso AngularJS - Parte 1Curso AngularJS - Parte 1
Curso AngularJS - Parte 1
 
REST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdfREST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdf
 
REST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdfREST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdf
 
Jheat
JheatJheat
Jheat
 
Indo alem do_mvc_node_js
Indo alem do_mvc_node_jsIndo alem do_mvc_node_js
Indo alem do_mvc_node_js
 

Mais de Celso Crivelaro

Testing Network Conditions with ToxiProxy
Testing Network Conditions with ToxiProxyTesting Network Conditions with ToxiProxy
Testing Network Conditions with ToxiProxyCelso Crivelaro
 
What devs should know about email
What devs should know about emailWhat devs should know about email
What devs should know about emailCelso Crivelaro
 
High Performance Architecture Patterns
High Performance Architecture PatternsHigh Performance Architecture Patterns
High Performance Architecture PatternsCelso Crivelaro
 
O que devs precisam saber sobre email
O que devs precisam saber sobre emailO que devs precisam saber sobre email
O que devs precisam saber sobre emailCelso Crivelaro
 
Escalando uma plataforma de e-mail transacional- aprendizado das trincheiras
Escalando uma plataforma de e-mail transacional- aprendizado das trincheirasEscalando uma plataforma de e-mail transacional- aprendizado das trincheiras
Escalando uma plataforma de e-mail transacional- aprendizado das trincheirasCelso Crivelaro
 
High Performance Architecture Patterns
High Performance Architecture PatternsHigh Performance Architecture Patterns
High Performance Architecture PatternsCelso Crivelaro
 
Treinamento apresentação
Treinamento apresentaçãoTreinamento apresentação
Treinamento apresentaçãoCelso Crivelaro
 
WTA 2012 - Proposta de Modelo Adaptativo para Geração de Contextos na Recom...
WTA 2012 - Proposta de Modelo Adaptativo para Geração de Contextos na Recom...WTA 2012 - Proposta de Modelo Adaptativo para Geração de Contextos na Recom...
WTA 2012 - Proposta de Modelo Adaptativo para Geração de Contextos na Recom...Celso Crivelaro
 
WTA2012 - Proposta de Modelo Adaptativo para Geração de Contextos na Recome...
WTA2012 - Proposta de Modelo Adaptativo para Geração de Contextos na Recome...WTA2012 - Proposta de Modelo Adaptativo para Geração de Contextos na Recome...
WTA2012 - Proposta de Modelo Adaptativo para Geração de Contextos na Recome...Celso Crivelaro
 

Mais de Celso Crivelaro (15)

Testing Network Conditions with ToxiProxy
Testing Network Conditions with ToxiProxyTesting Network Conditions with ToxiProxy
Testing Network Conditions with ToxiProxy
 
Actor model in Ruby
Actor model in RubyActor model in Ruby
Actor model in Ruby
 
What devs should know about email
What devs should know about emailWhat devs should know about email
What devs should know about email
 
High Performance Architecture Patterns
High Performance Architecture PatternsHigh Performance Architecture Patterns
High Performance Architecture Patterns
 
O que devs precisam saber sobre email
O que devs precisam saber sobre emailO que devs precisam saber sobre email
O que devs precisam saber sobre email
 
Escalando uma plataforma de e-mail transacional- aprendizado das trincheiras
Escalando uma plataforma de e-mail transacional- aprendizado das trincheirasEscalando uma plataforma de e-mail transacional- aprendizado das trincheiras
Escalando uma plataforma de e-mail transacional- aprendizado das trincheiras
 
High Performance Architecture Patterns
High Performance Architecture PatternsHigh Performance Architecture Patterns
High Performance Architecture Patterns
 
Apresentação GOLD
Apresentação GOLDApresentação GOLD
Apresentação GOLD
 
Treinamento apresentação
Treinamento apresentaçãoTreinamento apresentação
Treinamento apresentação
 
WTA 2012 - Proposta de Modelo Adaptativo para Geração de Contextos na Recom...
WTA 2012 - Proposta de Modelo Adaptativo para Geração de Contextos na Recom...WTA 2012 - Proposta de Modelo Adaptativo para Geração de Contextos na Recom...
WTA 2012 - Proposta de Modelo Adaptativo para Geração de Contextos na Recom...
 
WTA2012 - Proposta de Modelo Adaptativo para Geração de Contextos na Recome...
WTA2012 - Proposta de Modelo Adaptativo para Geração de Contextos na Recome...WTA2012 - Proposta de Modelo Adaptativo para Geração de Contextos na Recome...
WTA2012 - Proposta de Modelo Adaptativo para Geração de Contextos na Recome...
 
Primeiro step
Primeiro stepPrimeiro step
Primeiro step
 
Cv
CvCv
Cv
 
Formas decontratação
Formas decontrataçãoFormas decontratação
Formas decontratação
 
Negociação
NegociaçãoNegociação
Negociação
 

Separando a regra de negócios do Rails