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
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
仕様駆動開発へのトライを機に チームに適合する手法を模索し続けている話
freee
PRO
0
600
ドリフトを絶対に許さない(?)CDK運用 / CDK Ops with Zero Tolerance for Drifts (?)
akihisaikeda
1
220
PostgreSQL 18で考えるUUID主キー
kazuhiro1982
0
500
Webエンジニアなのにブラウザの仕組みがわからないので、Pythonで自作してみた
tatsuki12
4
1k
AIと壁打ちしながら進めるコスト管理
fufuhu
2
1.6k
Gmail/Google DriveをトリガーにAIエージェントを動かそう! / Run AI agents with Gmail/Google Drive as triggers!
har1101
2
430
リアルな遅延を測る仕様
kota_yata
1
120
DynamoDBの基礎を振り返りながらベクトル検索機能を理解する
musan
2
160
in-process GraphQL のすすめ #ginzajs
izumin5210
4
1.5k
Flow は今どうなっているか
mizdra
PRO
0
690
【QA Test Talk Vol.8】AI-DLC による Whole Team Approach の加速
pkshadeck
PRO
0
230
そこに3びきプロダクトがいるじゃろう——生成AI時代における“価値が届かない理由”の構造
kosuket
0
570
Featured
See All Featured
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
800
Discover your Explorer Soul
emna__ayadi
2
1.3k
What does AI have to do with Human Rights?
axbom
PRO
1
2.3k
For a Future-Friendly Web
brad_frost
183
10k
BBQ
matthewcrist
89
10k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
Marketing to machines
jonoalderson
1
5.7k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
430
The Cult of Friendly URLs
andyhume
79
7k
Facilitating Awesome Meetings
lara
57
7.1k
Between Models and Reality
mayunak
4
400
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