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
Limpando Seu Código JS Com O Padrão Pub/Sub
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Filipe Costa
December 13, 2014
Programming
200
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Limpando Seu Código JS Com O Padrão Pub/Sub
CEJS 2014
Code sample:
https://github.com/filipebarcos/cejs_pubsub
Filipe Costa
December 13, 2014
More Decks by Filipe Costa
See All by Filipe Costa
Lidando com Efeitos Colaterais com Redux Saga
filipebarcos
0
230
Pitch - Lidando com Efeitos Colaterais com Redux Saga
filipebarcos
0
400
Rust for Rubysts
filipebarcos
2
260
Tu trabalha em casa?? Que moleza hein!
filipebarcos
0
130
Rediscovering OOP in Rails World
filipebarcos
0
100
jQuery Bad Practices
filipebarcos
2
270
Intro to Ruby
filipebarcos
1
140
Other Decks in Programming
See All in Programming
Snowflake Summitでの新機能 CoCo / CoWork / snowflake-summit-2026-overall-what-new-coco
tatsuhiro
1
130
Vue × Nuxt × Oxc どこまで使える?実運用の現在地
andpad
0
240
New "Type" system on PicoRuby
pocke
1
920
AI時代の仕事技芸論 — ソフトウェア開発で「遊ぶように働く」職人的熟達のすすめ
kuranuki
2
670
TypeScript+Orvalで実現する型安全かつ堅牢でスケーラブルなマルチチャネル通知基盤 / TSKaigi Night talks ~after conference~
d0riven
0
330
気圧・高度・GPSを記録&可視化するアプリ「Koudo」を作った話
hjmkth
1
230
さぁV100、メモリをお食べ・・・
nilpe
0
140
コンテキストの使い捨てをやめる — ビジネスルール駆動開発と miko —
ioki
0
200
Composerを使ったサプライチェーン攻撃の様子を眺めてみる #phpstudy
o0h
PRO
2
250
Lessons from Spec-Driven Development
simas
PRO
0
190
Observability in Practice:Grafana 與 Edge Device SRE 的那些事
blueswen
0
160
A2UI という光を覗いてみる
satohjohn
1
130
Featured
See All Featured
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
590
Writing Fast Ruby
sferik
630
63k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
380
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
400
Building Applications with DynamoDB
mza
96
7.1k
Deep Space Network (abreviated)
tonyrice
0
170
Bash Introduction
62gerente
615
220k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.7k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
480
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
360
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
200
Transcript
PUB/SUB -> CLEAN JS “Limpando Seu Código JS Com O
Padrão Pub/Sub"
FILIPE COSTA @filipebarcos
Stack Builders Estamos contratando!
DISCLAIMER
CLEAN CODE
TÁ NA MODA! Angular Ember Backbone React MVVM MVC MV******
CONTEXTO
• Comprar Passeio Turístico no Site • Página Única •
Descrição do produto • Horários (seletor de dia/hora) • Mapa • Seletor de quantidade • Resumo da Compra • Formulário de Cliente e Cartão • Total da Compra
None
MÓDULOS
Checkout.OrderSummary = function() { return { addItem: function(item) { //
Add item to summary // Update Order Total }; }; }; Checkout.CustomerForm = function() {};
O PROBLEMA
DEPENDÊNCIA
Checkout.OrderSummary = function() { var addItemToSummary = function(item) { var
orderSummary = document.getElementById('order-summary'); var rowSnippet = buildRow(item); orderSummary.appendChild(rowSnippet); }; var updateOrderTotal = function(item) { var orderTotal = document.getElementById('order-total'), currentTotal = parseFloat(orderTotal.innerHTML); orderTotal.innerHTML = currentTotal + item.quantity * item.cost; }; return { addItem: function(item) { addItemToSummary(item); updateOrderTotal(item); }; }; };
Checkout.CustomerForm = function() { var fetchDeliveryCost = function(postalCode) { //fetch
from Post Office API }; var updateOrderTotal = function(cost) { var orderTotal = document.getElementById('order-total'), currentTotal = parseFloat(orderTotal.innerHTML); orderTotal.innerHTML = currentTotal + cost; }; return { updateDeliveryCost: function(postalCode) { var cost = fetchDeliveryCost(postalCode); document.getElementById('delivery-cost').innerHTML = cost; updateOrderTotal(cost); }; }; };
SOLUÇÕES SOLUÇÃO
PUB/SUB
PUBlish e SUBscribe é um padrão de mensageria, onde os
“Publishers” enviam mensagens e os “Subscribers” escutam essas mensagens
None
PUBSUB.JS
None
PubSub.publish('my-channel', 'value'); PubSub.subscribe('my-channel', function(message, data) { console.log('this is what I
got'); console.log(data); });
DE VOLTA AO PROBLEMA
Checkout.CustomerForm = function() { var updateOrderTotal = function(cost) { var
orderTotal = document.getElementById('order-total'), currentTotal = parseFloat(orderTotal.innerHTML); orderTotal.innerHTML = currentTotal + cost; }; }; Checkout.OrderSummary = function() { var updateOrderTotal = function(item) { var orderTotal = document.getElementById('order-total'), currentTotal = parseFloat(orderTotal.innerHTML); orderTotal.innerHTML = currentTotal + item.quantity * item.cost; }; };
Checkout.OrderSummary = function() { var addItemToSummary = function(item) { var
orderSummary = document.getElementById('order-summary'); var rowSnippet = buildRow(item); orderSummary.appendChild(rowSnippet); }; return { addItem: function(item) { addItemToSummary(item); PubSub.publish('checkout.item', item); }; }; };
Checkout.CustomerForm = function() { var fetchDeliveryCost = function(postalCode) { //fetch
from Post Office API }; return { updateDeliveryCost: function(postalCode) { var cost = fetchDeliveryCost(postalCode); document.getElementById('delivery-cost').innerHTML = cost; PubSub.publish('checkout.delivery-cost', cost); }; }; };
Checkout.OrderTotal = function() { var updateOrderTotal = function(cost) { var
orderTotal = document.getElementById('order-total'), currentTotal = parseFloat(orderTotal.innerHTML); orderTotal.innerHTML = currentTotal + cost; }; PubSub.subscribe('checkout.item', function(msg, item) { updateOrderTotal(item.quantity * item.cost); }); PubSub.subscribe('checkout.delivery-cost', function(msg, deliveryCost) { updateOrderTotal(deliveryCost); }); };
\O/
CONCLUSÃO
OBRIGADO https://github.com/filipebarcos/cejs_pubsub