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
170
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
200
Introduction to Go
sobrinho
1
91
Casos de otimização em aplicações Ruby on Rails
sobrinho
0
280
Introduction to automated tests (Goiania)
sobrinho
0
120
Introduction to automated tests
sobrinho
3
210
Otimização de Aplicações RoR
sobrinho
1
250
Introdução ao React (Simplificado)
sobrinho
0
140
Algoritmos de pesquisa
sobrinho
0
630
Introdução ao Docker
sobrinho
1
98
Other Decks in Programming
See All in Programming
単体テストを書かない技術 #phpcon_odawara
o0h
PRO
27
8.4k
初心者のためのRubyKaigi入門/RubyKaigi Introduction
a_matsuda
8
1.3k
Behind VS Code Extensions for JavaScript / TypeScript Linnting and Formatting
unvalley
5
1.1k
StoreKit2によるiOSのアプリ内課金のリニューアル
kangnux
0
120
Goのエラースタックトレースの歴史と今後
sonatard
9
1.7k
Compose-View Interop in Practice (mDevCamp 2024)
stewemetal
0
160
0→1と1→10の狭間で Javaという技術選定を振り返る/Reflecting on the Decision to Choose Java Between Scaling from 0 to 1 and 1 to 10
jaguar_imo
2
390
AWS CDKコントリビュートTIPS / aws-cdk-contribution-tips
gotok365
3
310
PHPはいつから死んでいるかの調査
chiroruxx
2
410
Ruby Pattern Matching
bkuhlmann
0
930
GitHub Actionsで泣かないためにやっておきたい設定 / Recommended GHA settings to avoid crying
pinkumohikan
3
560
dbtのドメイン分割による データ基盤の改善とDigdagとの連携
sakama
0
430
Featured
See All Featured
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
352
28k
Web Components: a chance to create the future
zenorocha
306
41k
In The Pink: A Labor of Love
frogandcode
138
21k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
19
6.9k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
228
16k
A Modern Web Designer's Workflow
chriscoyier
689
190k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
5
3.4k
Design by the Numbers
sachag
274
18k
The Power of CSS Pseudo Elements
geoffreycrofte
61
5k
What's in a price? How to price your products and services
michaelherold
238
11k
Atom: Resistance is Futile
akmur
260
25k
A better future with KSS
kneath
231
16k
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!