SlideShare una empresa de Scribd logo
1 de 31
Descargar para leer sin conexión
ReactJS / FLUX
Responsive web with DDD and event-driven design.
Format
• ~1 hour talk
• ReactJS
• Facebook FLUX
• Isomorphic Web Apps
• Questions any time.
• Will show code.
• Open discussion afterwards
User Interface
• Ubiquitous language revolves around components.
• Components are focused and reusable.
• Our UI is composed from these components.
• Finding component boundaries is very similar to
DDDesign process.
UI Behaviors
• Ubiquitous Language revolves around events.
• Events can originate from user interactions
(TaskChecked) or from environment
(FailedToSaveTaskToServer).
• Multiple components could react in response to a
single Event.
Apply DDD to UI and compose it from reusable
visual components aligned with the domain.
Capture UI interactions as functional event-
driven behaviors.
ReactJS
JS library from Facebook with ONE magical feature
Simple Component
var TodoList = React.createClass({
render: function() {
var createItem = function(itemText) {
return <li>{itemText}</li>;
};
return <ul>{this.props.items.map(createItem)}</ul>;
}
});

// ul and li are components, too
–ReactJS
“Don’t mutate UI! Re-render entire UI to Virtual
DOM on every change!”
ReactJS Summary
• Decompose UI into reusable components which
render to virtual DOM.
• ReactJS will sync VDOM to real browser DOM.
• JSX format is an optional syntactic sugar.
• ReactJS components encapsulate layout and
behavior in one file.
• Can render on client and server.
UI Composition
AppPage

LeftNavBar

AgendaNavItem

InboxNavItem

StarredNavItem

MainViewArea

InboxView

TaskList

TaskItem

TaskCheck

TaskStar

TaskItem

TaskItem

TaskComposer
— owns state

— pure

— pure

— pure

— pure

— pure

— owns state

— pure

— pure

— pure

— pure

— pure

— pure

— owns state
Pure Component
var TodoList = React.createClass({
render: function() {
var createItem = function(itemText) {
return <li>{itemText}</li>;
};
return <ul>{this.props.items.map(createItem)}</ul>;
}
});
State
var TodoApp = React.createClass({
getInitialState: function() {
return {items: [], text: ''};
},
onChange: function(e) {
this.setState({text: e.target.value});
},
handleSubmit: function(e) {
e.preventDefault();
var nextItems = this.state.items.concat([this.state.text]);
var nextText = '';
this.setState({items: nextItems, text: nextText});
},
render: function() {
return (
<div>
<h3>TODO</h3>
<TodoList items={this.state.items} />
<form onSubmit={this.handleSubmit}>
<input onChange={this.onChange} value={this.state.text} />
<button>{'Add #' + (this.state.items.length + 1)}</button>
</form>
</div>
);
}
});
Questions?
Re: ReactJS and UI composition
Pure ReactJS example
// show abdullin.com - static site generated with ReactJS
Facebook FLUX
Event-driven pattern for client-side web applications
Facebook FLUX
• Similar to CQRS
• Compliments ReactJS
• Unidirectional data flow (data flows one-way, unlike
MVC but like CQRS)
• This presentation has 3 diffs from “official” Flux
Essentials
• React components bind to stores, render UI and
invoke Event Creators.
• Event Creators are thin (mostly talk to the API).
• All events go through the dispatcher.
• Stores subscribe to events and hold behaviors.
Tackling Complexity
• Keep ReactJS components thin and focused.
• All behaviors are event-driven.
• All logic is in the stores (we know how to design and
test them).
• The only way to change something in the stores
(and in the UI) is by publishing an event (no setters)
• console.log
Questions?
Sample Showtime
// Show GTD App
Diffs from FLUX
• “Action”(original) -> “Event”
• “Action Creator” (original) -> “Event Creator”
• Declarative Store Subscriptions (Yahoo Fluxible)
Isomorphic Web
Don’t do it, unless justified
Isomorphic Web Apps
• Can render on client and server.
• Very fast first page load (time-to-tweet).
• SEO-friendly.
• Server computes state and sends to client with pre-
generated HTML.
• Becomes client-side app after page was loaded.
Example: /agenda
1. Invoke event creators associated with route (all API calls
happen server-side).
2. Dispatch events to all subscribed stores in memory.
3. Render route page component in memory.
4. Send HTML to client, serialize and send store state in 1 batch.
5. Client displays HTML.
6. Client loads client-side scripts, wires components and
dehydrates the state.
Sample Showtime
// Show GTD App Sources
Questions?
@abdullin / http://abdullin.com
Rinat Abdullin
Rinat Abdullin is a software engineer who spent 10
years in .NET before deflecting to Linux. Along the
way he learned from awesome people, contributed to
the IDDD book, designed architecture of a social
website and helped to deliver big data analytics for
retail in the cloud.
Rinat helps teams to scale applications and deal with
complex legacy software. He shares his experience
in the blog at abdullin.com

Más contenido relacionado

Destacado

Using ReactJS in AngularJS
Using ReactJS in AngularJSUsing ReactJS in AngularJS
Using ReactJS in AngularJSBoris Dinkevich
 
Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...
Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...
Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...Ryan Weaver
 
React JS and why it's awesome
React JS and why it's awesomeReact JS and why it's awesome
React JS and why it's awesomeAndrew Hull
 
Component based models and technology
Component based models and technologyComponent based models and technology
Component based models and technologySaransh Garg
 
React & The Art of Managing Complexity
React &  The Art of Managing ComplexityReact &  The Art of Managing Complexity
React & The Art of Managing ComplexityRyan Anklam
 
React Native on Android
React Native on AndroidReact Native on Android
React Native on Android萬皇 楊
 
CSS 讀書會 - 1 (Grid system)
CSS 讀書會 - 1 (Grid system)CSS 讀書會 - 1 (Grid system)
CSS 讀書會 - 1 (Grid system)Chih-cheng Wang
 
Javascript template & react js 初探
Javascript template & react js 初探Javascript template & react js 初探
Javascript template & react js 初探wantingj
 
Even more java script best practices
Even more java script best practicesEven more java script best practices
Even more java script best practicesChengHui Weng
 
Web Development best practices
Web Development best practicesWeb Development best practices
Web Development best practicesFadwa Gmiden
 
Introduction to JavaScript Programming
Introduction to JavaScript ProgrammingIntroduction to JavaScript Programming
Introduction to JavaScript ProgrammingRaveendra R
 
1335829820.8071 integrated%20hospital%20management%20system%20%5bihms%5d
1335829820.8071 integrated%20hospital%20management%20system%20%5bihms%5d1335829820.8071 integrated%20hospital%20management%20system%20%5bihms%5d
1335829820.8071 integrated%20hospital%20management%20system%20%5bihms%5dashlinrockey
 
Full Stack Toronto - the 3R Stack
Full Stack Toronto - the 3R StackFull Stack Toronto - the 3R Stack
Full Stack Toronto - the 3R StackScott Persinger
 
Show & tell - Who is Hugo?
Show & tell - Who is Hugo?Show & tell - Who is Hugo?
Show & tell - Who is Hugo?Dan Dineen
 
Building Open-Source React Components
Building Open-Source React ComponentsBuilding Open-Source React Components
Building Open-Source React ComponentsZack Argyle
 

Destacado (20)

Using ReactJS in AngularJS
Using ReactJS in AngularJSUsing ReactJS in AngularJS
Using ReactJS in AngularJS
 
Reactjs
Reactjs Reactjs
Reactjs
 
Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...
Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...
Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...
 
React JS and why it's awesome
React JS and why it's awesomeReact JS and why it's awesome
React JS and why it's awesome
 
Component based models and technology
Component based models and technologyComponent based models and technology
Component based models and technology
 
React & The Art of Managing Complexity
React &  The Art of Managing ComplexityReact &  The Art of Managing Complexity
React & The Art of Managing Complexity
 
React Native on Android
React Native on AndroidReact Native on Android
React Native on Android
 
React, Flux and a little bit of Redux
React, Flux and a little bit of ReduxReact, Flux and a little bit of Redux
React, Flux and a little bit of Redux
 
CSS 讀書會 - 1 (Grid system)
CSS 讀書會 - 1 (Grid system)CSS 讀書會 - 1 (Grid system)
CSS 讀書會 - 1 (Grid system)
 
Javascript template & react js 初探
Javascript template & react js 初探Javascript template & react js 初探
Javascript template & react js 初探
 
Even more java script best practices
Even more java script best practicesEven more java script best practices
Even more java script best practices
 
Hugo - Introduction
Hugo - IntroductionHugo - Introduction
Hugo - Introduction
 
Web Development best practices
Web Development best practicesWeb Development best practices
Web Development best practices
 
Introduction to JavaScript Programming
Introduction to JavaScript ProgrammingIntroduction to JavaScript Programming
Introduction to JavaScript Programming
 
1335829820.8071 integrated%20hospital%20management%20system%20%5bihms%5d
1335829820.8071 integrated%20hospital%20management%20system%20%5bihms%5d1335829820.8071 integrated%20hospital%20management%20system%20%5bihms%5d
1335829820.8071 integrated%20hospital%20management%20system%20%5bihms%5d
 
Gcc
GccGcc
Gcc
 
Gcc opt
Gcc optGcc opt
Gcc opt
 
Full Stack Toronto - the 3R Stack
Full Stack Toronto - the 3R StackFull Stack Toronto - the 3R Stack
Full Stack Toronto - the 3R Stack
 
Show & tell - Who is Hugo?
Show & tell - Who is Hugo?Show & tell - Who is Hugo?
Show & tell - Who is Hugo?
 
Building Open-Source React Components
Building Open-Source React ComponentsBuilding Open-Source React Components
Building Open-Source React Components
 

Último

Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identityteam-WIBU
 
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...Akihiro Suda
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...Technogeeks
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureDinusha Kumarasiri
 
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)jennyeacort
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Angel Borroy López
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Developmentvyaparkranti
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalLionel Briand
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...OnePlan Solutions
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaHanief Utama
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Natan Silnitsky
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Mater
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...confluent
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEEVICTOR MAESTRE RAMIREZ
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesPhilip Schwarz
 
Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commercemanigoyal112
 
Xen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdfXen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdfStefano Stabellini
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...OnePlan Solutions
 
How To Manage Restaurant Staff -BTRESTRO
How To Manage Restaurant Staff -BTRESTROHow To Manage Restaurant Staff -BTRESTRO
How To Manage Restaurant Staff -BTRESTROmotivationalword821
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfFerryKemperman
 

Último (20)

Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identity
 
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with Azure
 
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Development
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive Goal
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief Utama
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEE
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a series
 
Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commerce
 
Xen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdfXen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdf
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
 
How To Manage Restaurant Staff -BTRESTRO
How To Manage Restaurant Staff -BTRESTROHow To Manage Restaurant Staff -BTRESTRO
How To Manage Restaurant Staff -BTRESTRO
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdf
 

ReactJS / FLUX - Responsive web with DDD and event-driven design

  • 1. ReactJS / FLUX Responsive web with DDD and event-driven design.
  • 2. Format • ~1 hour talk • ReactJS • Facebook FLUX • Isomorphic Web Apps • Questions any time. • Will show code. • Open discussion afterwards
  • 3.
  • 4. User Interface • Ubiquitous language revolves around components. • Components are focused and reusable. • Our UI is composed from these components. • Finding component boundaries is very similar to DDDesign process.
  • 5. UI Behaviors • Ubiquitous Language revolves around events. • Events can originate from user interactions (TaskChecked) or from environment (FailedToSaveTaskToServer). • Multiple components could react in response to a single Event.
  • 6. Apply DDD to UI and compose it from reusable visual components aligned with the domain. Capture UI interactions as functional event- driven behaviors.
  • 7. ReactJS JS library from Facebook with ONE magical feature
  • 8. Simple Component var TodoList = React.createClass({ render: function() { var createItem = function(itemText) { return <li>{itemText}</li>; }; return <ul>{this.props.items.map(createItem)}</ul>; } });
 // ul and li are components, too
  • 9. –ReactJS “Don’t mutate UI! Re-render entire UI to Virtual DOM on every change!”
  • 10.
  • 11. ReactJS Summary • Decompose UI into reusable components which render to virtual DOM. • ReactJS will sync VDOM to real browser DOM. • JSX format is an optional syntactic sugar. • ReactJS components encapsulate layout and behavior in one file. • Can render on client and server.
  • 12. UI Composition AppPage
 LeftNavBar
 AgendaNavItem
 InboxNavItem
 StarredNavItem
 MainViewArea
 InboxView
 TaskList
 TaskItem
 TaskCheck
 TaskStar
 TaskItem
 TaskItem
 TaskComposer — owns state
 — pure
 — pure
 — pure
 — pure
 — pure
 — owns state
 — pure
 — pure
 — pure
 — pure
 — pure
 — pure
 — owns state
  • 13. Pure Component var TodoList = React.createClass({ render: function() { var createItem = function(itemText) { return <li>{itemText}</li>; }; return <ul>{this.props.items.map(createItem)}</ul>; } });
  • 14. State var TodoApp = React.createClass({ getInitialState: function() { return {items: [], text: ''}; }, onChange: function(e) { this.setState({text: e.target.value}); }, handleSubmit: function(e) { e.preventDefault(); var nextItems = this.state.items.concat([this.state.text]); var nextText = ''; this.setState({items: nextItems, text: nextText}); }, render: function() { return ( <div> <h3>TODO</h3> <TodoList items={this.state.items} /> <form onSubmit={this.handleSubmit}> <input onChange={this.onChange} value={this.state.text} /> <button>{'Add #' + (this.state.items.length + 1)}</button> </form> </div> ); } });
  • 15. Questions? Re: ReactJS and UI composition
  • 16. Pure ReactJS example // show abdullin.com - static site generated with ReactJS
  • 17. Facebook FLUX Event-driven pattern for client-side web applications
  • 18.
  • 19. Facebook FLUX • Similar to CQRS • Compliments ReactJS • Unidirectional data flow (data flows one-way, unlike MVC but like CQRS) • This presentation has 3 diffs from “official” Flux
  • 20.
  • 21. Essentials • React components bind to stores, render UI and invoke Event Creators. • Event Creators are thin (mostly talk to the API). • All events go through the dispatcher. • Stores subscribe to events and hold behaviors.
  • 22. Tackling Complexity • Keep ReactJS components thin and focused. • All behaviors are event-driven. • All logic is in the stores (we know how to design and test them). • The only way to change something in the stores (and in the UI) is by publishing an event (no setters) • console.log
  • 25. Diffs from FLUX • “Action”(original) -> “Event” • “Action Creator” (original) -> “Event Creator” • Declarative Store Subscriptions (Yahoo Fluxible)
  • 26. Isomorphic Web Don’t do it, unless justified
  • 27. Isomorphic Web Apps • Can render on client and server. • Very fast first page load (time-to-tweet). • SEO-friendly. • Server computes state and sends to client with pre- generated HTML. • Becomes client-side app after page was loaded.
  • 28. Example: /agenda 1. Invoke event creators associated with route (all API calls happen server-side). 2. Dispatch events to all subscribed stores in memory. 3. Render route page component in memory. 4. Send HTML to client, serialize and send store state in 1 batch. 5. Client displays HTML. 6. Client loads client-side scripts, wires components and dehydrates the state.
  • 29. Sample Showtime // Show GTD App Sources
  • 31. Rinat Abdullin Rinat Abdullin is a software engineer who spent 10 years in .NET before deflecting to Linux. Along the way he learned from awesome people, contributed to the IDDD book, designed architecture of a social website and helped to deliver big data analytics for retail in the cloud. Rinat helps teams to scale applications and deal with complex legacy software. He shares his experience in the blog at abdullin.com