Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Extraindo a regra de negócio para uma nova camada
Search
Gabriel Sobrinho
May 10, 2012
Programming
0
180
Extraindo a regra de negócio para uma nova camada
Apresentado no Rails-MG em 2012
Gabriel Sobrinho
May 10, 2012
Tweet
Share
More Decks by Gabriel Sobrinho
See All by Gabriel Sobrinho
Arquiteturas Multi-Tenant RubyConf 2022
sobrinho
0
220
Introduction to Go
sobrinho
1
110
Casos de otimização em aplicações Ruby on Rails
sobrinho
0
310
Introduction to automated tests (Goiania)
sobrinho
0
150
Introduction to automated tests
sobrinho
3
230
Otimização de Aplicações RoR
sobrinho
1
270
Introdução ao React (Simplificado)
sobrinho
0
150
Algoritmos de pesquisa
sobrinho
0
660
Introdução ao Docker
sobrinho
1
110
Other Decks in Programming
See All in Programming
ECS初心者の仲間 – TUIツール「e1s」の紹介
keidarcy
0
150
AI時代のUIはどこへ行く?
yusukebe
6
1.7k
Rancher と Terraform
fufuhu
2
180
「手軽で便利」に潜む罠。 Popover API を WCAG 2.2の視点で安全に使うには
taitotnk
0
200
Azure SRE Agentで運用は楽になるのか?
kkamegawa
0
1k
兎に角、コードレビュー
mitohato14
0
160
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
290
ProxyによるWindow間RPC機構の構築
syumai
1
260
AIを活用し、今後に備えるための技術知識 / Basic Knowledge to Utilize AI
kishida
17
3.8k
個人軟體時代
ethanhuang13
0
280
実用的なGOCACHEPROG実装をするために / golang.tokyo #40
mazrean
1
130
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
110
Featured
See All Featured
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
Visualization
eitanlees
147
16k
What's in a price? How to price your products and services
michaelherold
246
12k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
53
2.9k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
How GitHub (no longer) Works
holman
315
140k
Reflections from 52 weeks, 52 projects
jeffersonlam
351
21k
How to Ace a Technical Interview
jacobian
279
23k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
33
2.4k
Transcript
Extraindo a regra de negócio para uma nova camada
@sobrinho • software architect @ nohup • https://github.com/sobrinho
Fat Controllers
Fat Models
Qual é o problema com essas abordagens?
Nenhum!
Por que pensar binário?
Se cada caso deve ser analisado individualmente...
Quem nunca fez um código macarrão?
None
None
Vamos fazer uma pequena aplicação
Eu preciso cadastrar meus contratos e seus itens
E também preciso cancelar os itens individualmente, salvando a data
do cancelamento
None
Rails Rails é um framework web full-stack Model-View-Controller (MVC)
Contractus ~/Code (1.9.3-p0) 21:08:25 $ rails new contractus ... create
app/controllers create app/models create app/views ...
Contractus ~/Code (1.9.3-p0) 21:08:25 $ rails new contractus ... create
app/controllers create app/models create app/views ...
Contractus ~/Code (1.9.3-p0) 21:08:25 $ rails new contractus ... create
app/controllers create app/models create app/views ...
Contractus ~/Code (1.9.3-p0) 21:08:25 $ rails new contractus ... create
app/controllers create app/models create app/views ...
Contractus ~/Code (1.9.3-p0) 21:08:25 $ rails new contractus ... create
app/controllers create app/models create app/views ...
Contractus ~/Code (1.9.3-p0) 21:08:25 $ rails new contractus ... create
app/controllers create app/models create app/views ...
Contractus ~/Code (1.9.3-p0) 21:08:25 $ rails new contractus ... create
app/controllers create app/models create app/views ...
Contractus ~/Code/contractus (1.9.3-p0) (master) 21:10:52 $ rails generate scaffold contract
name:string 21:21:49 $ rails generate scaffold item contract:references name:string price:decimal canceled_at:date
Contractus ~/Code/contractus (1.9.3-p0) (master) 21:10:52 $ rails generate scaffold contract
name:string 21:21:49 $ rails generate scaffold item contract:references name:string price:decimal canceled_at:date
Contractus ~/Code/contractus (1.9.3-p0) (master) 21:10:52 $ rails generate scaffold contract
name:string 21:21:49 $ rails generate scaffold item contract:references name:string price:decimal canceled_at:date
Contractus ~/Code/contractus (1.9.3-p0) (master) 21:10:52 $ rails generate scaffold contract
name:string 21:21:49 $ rails generate scaffold item contract:references name:string price:decimal canceled_at:date
Contractus ~/Code/contractus (1.9.3-p0) (master) 21:10:52 $ rails generate scaffold contract
name:string 21:21:49 $ rails generate scaffold item contract:references name:string price:decimal canceled_at:date
Contractus ~/Code/contractus (1.9.3-p0) (master) 21:10:52 $ rails generate scaffold contract
name:string 21:21:49 $ rails generate scaffold item contract:references name:string price:decimal canceled_at:date
Contractus ~/Code/contractus (1.9.3-p0) (master) 21:10:52 $ rails generate scaffold contract
name:string 21:21:49 $ rails generate scaffold item contract:references name:string price:decimal canceled_at:date
Contractus ~/Code/contractus (1.9.3-p0) (master) 21:10:52 $ rails generate scaffold contract
name:string 21:21:49 $ rails generate scaffold item contract:references name:string price:decimal canceled_at:date
Contractus ~/Code/contractus (1.9.3-p0) (master) 21:10:52 $ rails generate scaffold contract
name:string 21:21:49 $ rails generate scaffold item contract:references name:string price:decimal canceled_at:date
Contractus ~/Code/contractus (1.9.3-p0) (master) 21:10:52 $ rails generate scaffold contract
name:string 21:21:49 $ rails generate scaffold item contract:references name:string price:decimal canceled_at:date
Contractus ~/Code/contractus (1.9.3-p0) (master) 21:10:52 $ rails generate scaffold contract
name:string 21:21:49 $ rails generate scaffold item contract:references name:string price:decimal canceled_at:date
Contractus ~/Code/contractus (1.9.3-p0) (master) 21:10:52 $ rails generate scaffold contract
name:string 21:21:49 $ rails generate scaffold item contract:references name:string price:decimal canceled_at:date
Contractus ~/Code/contractus (1.9.3-p0) (master) 21:10:52 $ rails generate scaffold contract
name:string 21:21:49 $ rails generate scaffold item contract:references name:string price:decimal canceled_at:date
Contractus ~/Code/contractus (1.9.3-p0) (master) 21:10:52 $ rails generate scaffold contract
name:string 21:21:49 $ rails generate scaffold item contract:references name:string price:decimal canceled_at:date
Fat Controller
None
~/Code/contractus (1.9.3-p0) ((v0.1.0)) 07:28:35 $ time rspec spec/controllers ................................. Finished
in 0.42347 seconds 33 examples, 0 failures real 0m7.831s user 0m3.328s sys 0m0.651s
Fat Model
None
~/Code/contractus (1.9.3-p0) ((v0.2.0)) 02:28:40 $ time rspec spec/models . Finished
in 0.02556 seconds 1 example, 0 failures real 0m3.048s user 0m2.621s sys 0m0.413s
Business
None
~/Code/contractus (1.9.3-p0) ((v0.3.0)) 02:29:59 $ time rspec spec/business . Finished
in 0.00072 seconds 1 example, 0 failures real 0m0.535s user 0m0.397s sys 0m0.088s
Fluxo mais simples Controller x Business x Model
Testes isolados Regra de negócio não deve depender de absolutamente
nada para ser testada
Manutenção fácil Como proceder se somente os itens das últimas
24h puderem ser cancelados?
Dúvidas?
Obrigado!