SlideShare a Scribd company logo
Flux
…a Pattern
Prologue
“Sometimes you gotta go back to actually move
forward.”
-Matthew McConaughey
A long time ago in a PARC far,
far away….
SMALLTALK-
80
History
Fast Forward
Rails
Cocoa
Client-side MV* JavaScript Frameworks
The Good Parts
Familiarity
They Makes (Some) Things Simple
Dynamic User Experience
The Not So Good Parts
Lack of Consensus
Much Fowler
So Insight
wow
Very Martin
how enterprise
Complex Models
Data Binding Solutions
Framework Support
Compatibility
Templating
Enough Complaining…
What the Flux?
Unidirectional Data Flow
Conceptual Integrity
“a system must have a powerful metaphor that is uniformly applied throughout a system“ – Alan
Kay
Move Fast With Stable Infrastructure
Reliability
The Pieces
Views
React Components
Maintain UI State
Respond to changes in Stores
Render data, respond to interaction
Controller-Views
Stores
Maintain Application State
Each Store manages a particular domain within the app
Similar to Models, but manage many objects
Emit change events
Actions
Can be anything that changes the state of your data
User generated events
Server events
Real time updates
Error Handling
Dispatcher
Key to unidirectional data flow
Central Hub/Callback Registry
Manages dependencies between Stores
waitFor(ids)
Keeps State in Stores, closer to the logic that updates
that State
The Pattern
Dispatcher
Profile
Controller-
View
Profile Store
Notification
Store
Chat Store
Prefs
Pic
Notification
Controller-
View
Chat
Controller-
View
Server New Message
Action
Pic Changed
Action
Action Dispatcher ViewStore
Action
Server
Code
Other Implementations
McFly
Fluxxor
Reflux
Resources
Bill Fisher
Flux GitHub
Chat Tutorial
Flux Overview (with Video)
Presentation Resources
Model View Controller: History, Theory and Usage
MVC: Xerox PARC 1978-79
Model View Controller History
Questions?
How do we convince people that in programming simplicity and clarity —in short:
what mathematicians call "elegance"— are not a dispensable luxury, but a crucial
matter that decides between success and failure?
Edsger Dijkstra

More Related Content

Similar to Flux

Javawug
JavawugJavawug
Javawug
Skills Matter
 
Managing State With JBoss Seam
Managing State With JBoss SeamManaging State With JBoss Seam
Managing State With JBoss Seam
guest74ef29
 
Android Architecture Components
Android Architecture ComponentsAndroid Architecture Components
Android Architecture Components
Darshan Parikh
 
Event sourcing
Event sourcingEvent sourcing
Event sourcing
Touraj Ebrahimi
 
Eda on the azure services platform
Eda on the azure services platformEda on the azure services platform
Eda on the azure services platform
Yves Goeleven
 
Operating a World-Class Virtual Infrastructure
Operating a World-Class Virtual InfrastructureOperating a World-Class Virtual Infrastructure
Operating a World-Class Virtual Infrastructure
1CloudRoad.com
 
Being Elastic -- Evolving Programming for the Cloud
Being Elastic -- Evolving Programming for the CloudBeing Elastic -- Evolving Programming for the Cloud
Being Elastic -- Evolving Programming for the Cloud
Randy Shoup
 
Advanced web application architecture Way2Web
Advanced web application architecture Way2WebAdvanced web application architecture Way2Web
Advanced web application architecture Way2Web
Matthias Noback
 
Reactive Worksheets presentation @ Silicon Roundabout - London FinTech Week
Reactive Worksheets presentation @ Silicon Roundabout - London FinTech WeekReactive Worksheets presentation @ Silicon Roundabout - London FinTech Week
Reactive Worksheets presentation @ Silicon Roundabout - London FinTech Week
FalconSoft Ltd
 
Liftweb
LiftwebLiftweb
Liftweb
Scalac
 
Shopzilla On Concurrency
Shopzilla On ConcurrencyShopzilla On Concurrency
Shopzilla On Concurrency
Will Gage
 
Managing the cloud
Managing the cloudManaging the cloud
Managing the cloud
Francesco Orlando
 
Symantec I3 - Inquire & Cluster
Symantec I3 - Inquire & Cluster Symantec I3 - Inquire & Cluster
Symantec I3 - Inquire & Cluster
sebastian.guerrero
 
Shopzilla On Concurrency
Shopzilla On ConcurrencyShopzilla On Concurrency
Shopzilla On Concurrency
Rodney Barlow
 
ScalabilityAvailability
ScalabilityAvailabilityScalabilityAvailability
ScalabilityAvailability
webuploader
 
Robust web apps with React.js
Robust web apps with React.jsRobust web apps with React.js
Robust web apps with React.js
Max Klymyshyn
 
[2016/2017] Introduction to Software Architecture
[2016/2017] Introduction to Software Architecture[2016/2017] Introduction to Software Architecture
[2016/2017] Introduction to Software Architecture
Ivano Malavolta
 
API Design and WebSocket
API Design and WebSocketAPI Design and WebSocket
API Design and WebSocket
Frank Greco
 
Reactive Worksheets By FalconSoft Ltd
Reactive Worksheets By FalconSoft LtdReactive Worksheets By FalconSoft Ltd
Reactive Worksheets By FalconSoft Ltd
FalconSoft Ltd
 
Mvvm in the real world tccc10
Mvvm in the real world   tccc10Mvvm in the real world   tccc10
Mvvm in the real world tccc10
Bryan Anderson
 

Similar to Flux (20)

Javawug
JavawugJavawug
Javawug
 
Managing State With JBoss Seam
Managing State With JBoss SeamManaging State With JBoss Seam
Managing State With JBoss Seam
 
Android Architecture Components
Android Architecture ComponentsAndroid Architecture Components
Android Architecture Components
 
Event sourcing
Event sourcingEvent sourcing
Event sourcing
 
Eda on the azure services platform
Eda on the azure services platformEda on the azure services platform
Eda on the azure services platform
 
Operating a World-Class Virtual Infrastructure
Operating a World-Class Virtual InfrastructureOperating a World-Class Virtual Infrastructure
Operating a World-Class Virtual Infrastructure
 
Being Elastic -- Evolving Programming for the Cloud
Being Elastic -- Evolving Programming for the CloudBeing Elastic -- Evolving Programming for the Cloud
Being Elastic -- Evolving Programming for the Cloud
 
Advanced web application architecture Way2Web
Advanced web application architecture Way2WebAdvanced web application architecture Way2Web
Advanced web application architecture Way2Web
 
Reactive Worksheets presentation @ Silicon Roundabout - London FinTech Week
Reactive Worksheets presentation @ Silicon Roundabout - London FinTech WeekReactive Worksheets presentation @ Silicon Roundabout - London FinTech Week
Reactive Worksheets presentation @ Silicon Roundabout - London FinTech Week
 
Liftweb
LiftwebLiftweb
Liftweb
 
Shopzilla On Concurrency
Shopzilla On ConcurrencyShopzilla On Concurrency
Shopzilla On Concurrency
 
Managing the cloud
Managing the cloudManaging the cloud
Managing the cloud
 
Symantec I3 - Inquire & Cluster
Symantec I3 - Inquire & Cluster Symantec I3 - Inquire & Cluster
Symantec I3 - Inquire & Cluster
 
Shopzilla On Concurrency
Shopzilla On ConcurrencyShopzilla On Concurrency
Shopzilla On Concurrency
 
ScalabilityAvailability
ScalabilityAvailabilityScalabilityAvailability
ScalabilityAvailability
 
Robust web apps with React.js
Robust web apps with React.jsRobust web apps with React.js
Robust web apps with React.js
 
[2016/2017] Introduction to Software Architecture
[2016/2017] Introduction to Software Architecture[2016/2017] Introduction to Software Architecture
[2016/2017] Introduction to Software Architecture
 
API Design and WebSocket
API Design and WebSocketAPI Design and WebSocket
API Design and WebSocket
 
Reactive Worksheets By FalconSoft Ltd
Reactive Worksheets By FalconSoft LtdReactive Worksheets By FalconSoft Ltd
Reactive Worksheets By FalconSoft Ltd
 
Mvvm in the real world tccc10
Mvvm in the real world   tccc10Mvvm in the real world   tccc10
Mvvm in the real world tccc10
 

Recently uploaded

Using Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional SafetyUsing Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional Safety
Ayan Halder
 
DDS-Security 1.2 - What's New? Stronger security for long-running systems
DDS-Security 1.2 - What's New? Stronger security for long-running systemsDDS-Security 1.2 - What's New? Stronger security for long-running systems
DDS-Security 1.2 - What's New? Stronger security for long-running systems
Gerardo Pardo-Castellote
 
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Łukasz Chruściel
 
Webinar On-Demand: Using Flutter for Embedded
Webinar On-Demand: Using Flutter for EmbeddedWebinar On-Demand: Using Flutter for Embedded
Webinar On-Demand: Using Flutter for Embedded
ICS
 
Graspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code AnalysisGraspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code Analysis
Aftab Hussain
 
Artificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension FunctionsArtificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension Functions
Octavian Nadolu
 
Empowering Growth with Best Software Development Company in Noida - Deuglo
Empowering Growth with Best Software  Development Company in Noida - DeugloEmpowering Growth with Best Software  Development Company in Noida - Deuglo
Empowering Growth with Best Software Development Company in Noida - Deuglo
Deuglo Infosystem Pvt Ltd
 
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise EditionWhy Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
Envertis Software Solutions
 
Mobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona InfotechMobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona Infotech
Drona Infotech
 
socradar-q1-2024-aviation-industry-report.pdf
socradar-q1-2024-aviation-industry-report.pdfsocradar-q1-2024-aviation-industry-report.pdf
socradar-q1-2024-aviation-industry-report.pdf
SOCRadar
 
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CDKuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
rodomar2
 
ALGIT - Assembly Line for Green IT - Numbers, Data, Facts
ALGIT - Assembly Line for Green IT - Numbers, Data, FactsALGIT - Assembly Line for Green IT - Numbers, Data, Facts
ALGIT - Assembly Line for Green IT - Numbers, Data, Facts
Green Software Development
 
GreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-JurisicGreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-Jurisic
Green Software Development
 
SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024
Hironori Washizaki
 
Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit ParisNeo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
Safe Software
 
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxTop Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
rickgrimesss22
 
Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit ParisNeo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j
 
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissancesAtelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Neo4j
 
How to write a program in any programming language
How to write a program in any programming languageHow to write a program in any programming language
How to write a program in any programming language
Rakesh Kumar R
 

Recently uploaded (20)

Using Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional SafetyUsing Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional Safety
 
DDS-Security 1.2 - What's New? Stronger security for long-running systems
DDS-Security 1.2 - What's New? Stronger security for long-running systemsDDS-Security 1.2 - What's New? Stronger security for long-running systems
DDS-Security 1.2 - What's New? Stronger security for long-running systems
 
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
 
Webinar On-Demand: Using Flutter for Embedded
Webinar On-Demand: Using Flutter for EmbeddedWebinar On-Demand: Using Flutter for Embedded
Webinar On-Demand: Using Flutter for Embedded
 
Graspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code AnalysisGraspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code Analysis
 
Artificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension FunctionsArtificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension Functions
 
Empowering Growth with Best Software Development Company in Noida - Deuglo
Empowering Growth with Best Software  Development Company in Noida - DeugloEmpowering Growth with Best Software  Development Company in Noida - Deuglo
Empowering Growth with Best Software Development Company in Noida - Deuglo
 
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise EditionWhy Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
 
Mobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona InfotechMobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona Infotech
 
socradar-q1-2024-aviation-industry-report.pdf
socradar-q1-2024-aviation-industry-report.pdfsocradar-q1-2024-aviation-industry-report.pdf
socradar-q1-2024-aviation-industry-report.pdf
 
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CDKuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
 
ALGIT - Assembly Line for Green IT - Numbers, Data, Facts
ALGIT - Assembly Line for Green IT - Numbers, Data, FactsALGIT - Assembly Line for Green IT - Numbers, Data, Facts
ALGIT - Assembly Line for Green IT - Numbers, Data, Facts
 
GreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-JurisicGreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-Jurisic
 
SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024
 
Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit ParisNeo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
 
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxTop Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
 
Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit ParisNeo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
 
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissancesAtelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissances
 
How to write a program in any programming language
How to write a program in any programming languageHow to write a program in any programming language
How to write a program in any programming language
 

Flux

Editor's Notes

  1. The point of this talk is ultimately to explain the Flux architectural pattern But, in my research, I dig quite a bit of digging and felt it necessary to provide some history, or software archaeology if you will, on MVC. It should provide a solid base before diving into the Flux pattern. I’m a SE at f[23] Graduate of FSU and UNF with degrees in Music and Computing I love fishing, guitar, and potent potables.
  2. MVC was initially created by TREEG-VUH RHEINS-COW Trygve Reenskaug in 1970s, at Xerox PARC, while he was working with Alan Kay on the Dynabook The Dynabook (or KiddiComp) was first envision by Kay in 1968 as an educational computer for kids. Tablet/slate Originally Model-View-Controller-Editor Editor was a temporary component that the View created to interface with keyboard and input devices Originally Smalltalk-76, but first real appearance was Smalltalk-80 The first significant paper published on MVC was "A Cookbook for Using the Model-View-Controller User Interface Paradigm in Smalltalk -80", by Glenn Krasner and Stephen Pope, published in the August/September 1988 issue of the JournalOfObjectOrientedProgramming (JOOP).
  3. MVC was initially created by Trygve Reenskaug TREEG-VUH RHEINS-COW in 1970s, obviously at Xerox PARC, while he was working with Alan Kay on the Dynabook The Dynabook (or KiddiComp) was first envisioned by Kay in 1968 as an educational computer for kids. Tablet/slate Originally Model-View-Controller-Editor Editor was a temporary component that the View created to interface with keyboard and input devices A few previous versions, but first real appearance was Smalltalk-80 The first significant paper published on MVC was "A Cookbook for Using the Model-View-Controller User Interface Paradigm in Smalltalk -80", by Glenn Krasner and Stephen Pope, published in the August/September 1988 issue of the JournalOfObjectOrientedProgramming (JOOP).
  4. Current interpretations and implementations of MVC differ from the original intent Back in the 70’s, GUIs weren’t as common, and a concept known as Separated Presentation began to be used to differentiate between domain objects and Presentation objects Smalltalk-80’s implementation of MVC took it a step further and had an objective of separating out the application logic from the UI The idea was pushing for reuse of the domain models to further reuse in other UIs in the application. In Smalltalk-80’s implementation: A model represented domain specific data and was ignorant of the user-interface. When a model changed, it would inform its observers. A View represented the current state of a Model. The Observer pattern was used for letting the View know whenever the Model was updated or modified. Presentation was taken care of by the View, but there wasn’t just a single View and Controller, a View-Controller pair was required for each section or element being displayed on the screen. The Controller’s role in this pair was handling user interaction (key presses and actions), making decisions for the View.
  5. So here are two different versions of Smalltalk In both, and in practically all MVC implementations, the model does not depend on the view or the controller Observer pattern was used to update views when models changed For SECOND slide Smalltalk-80 MVC did not make a view/controller separation Notice that the user interactions start in the View or the Controller-View pair
  6. So, this is an evolution away from the MVCE pattern and the two previous Smalltalk implementations, where the controller is separated as well as accepting and responding to user interactions Messages can be passed from the Controller or the View into the Model to update it’s application state Changes are then signaled back to either the Controller or the View The View can update itself based on some changes in the model, or by way of a Controller message
  7. It's a lot different from the original Smalltalk MVC pattern since Rails operates in a very different environment than a typical Smalltalk application Again, the model does not depend on the view or the controller There isn't a direct dependency between the view and the model. The controller collects all the needed data from the model and passes it to the view Given that Rails operates in a client-server environment the view does not update automatically when the model changes Most of today's MVC web-frameworks use a pattern very similar to the one Rails uses
  8. Cocoa's MVC puts a lot importance on the controller and this makes it a lot different than the original Smalltalk MVC. A Cocoa controller acts as a mediator between the view and the model [this is commonly known from the Mediator pattern]: The reason to use the mediator pattern is probably because the data flow is cleaner than the traditional MVC found in Smalltalk
  9. Familiar Concepts and Patterns: Easy to learn (most of the time) Many developers are familiar with some implementation of MVC on the server. ASP.NET MVC, RoR, Spring Allows for fast prototyping, garnering client feedback, A/B Testing, etc. Uniformity for developers across the team And most of the time, when things break, you’ll know where to look
  10. Typically obfuscates some of the less attractive and unreliable parts of JavaScript. This is good and bad. Rapid development cycles Testable Better debugging (sometimes) Modularity/Reusability and Maintainability Helpers for security, templating, routing, data-binding etc. Shorter learning curve (sometimes)
  11. Real time/native feel Asynchrony Flashy Controls and Components
  12. So, who do we turn to?
  13. Complex Models: KVO and 2-way DB can trigger cascading updates, which in turn triggers re-rendering, repainting, and reflowing of related DOM elements. Deeper object graphs can quickly turn a few observables or bindings into thousands It’s difficult to debug or trace these types of data-bindings Explicitly and declaratively registering for changes makes things much simpler than binding a property of your model to your view, then trying to wrap some logic around it.
  14. Data-Binding Solutions: Data binding solutions are constraining. It should be an opt in. Non-trivial abstractions (leaky) They should at least be minimally leaky and provide the developer an escape hatch
  15. Remember that in practically all implementations we’ve seen, there’s never a direct dependency between the Model and the View
  16. Framework Constraints: If the Framework doesn’t support it, you’re on your own Whenever you encounter things that the creators of the framework didn’t anticipate, sad face.
  17. Choosing one framework may cause problems in using third party libraries or other solutions. Sad face.
  18. Initially, I referenced this in my React talk, but there’s a different side to it from an MVC/FLUX Point of View Templating Engines are crippled by default. You are at the mercy of the templating engine and whatever its API offers you If we look back at traditional MVC, it’s the Views job to handle Presentation Logic. Pushing this logic into a templating engine isn’t separating a concern, it’s separating a technology, but for what? Looser coupling? Higher cohesion is favorable here. If you accept that, you gain the full power of JavaScript to determine your Presentation Logic versus the constrained Set of functionality provided by your templating engine.
  19. Unidirectional Data Flow All of your data flows in one direction, similar to function-reactive programming There are no two-way data bindings Conceptual Integrity Simplicity and digestible concepts are key to Flux Simplicity allows for better diagnosing of bugs, quicker ramp up time for new developers, and rapid refactoring of large portions of functionality Move Fast Zuckerberg quote Predictability, reliability Again, being predictable not only makes it easier to debug, but it makes the entire application and application lifecycle easier to think about, allowing the developer to focus on the domain and issues at hand. Reliability Lack of leaky abstractions, data binding solutions, and implicit code leads to more reliable code. Declarative, explicit, pure functions lead to more readable , comprehendible, and reliable code.
  20. Maintain UI state Controller-Views sit at the top of a hierarchy and listen for changes that child components may be interested in. Typically, they’ll pass the entire state of the specific domain along to its children, keeping them all in sync.
  21. Maintain app state allows different parts of the app to remain highly decoupled. When dependencies do occur, they’re managed hierarchically and synchronously through the dispatcher Stores manage app state for a specific domain within the application Typically manage many objects
  22. Actions are really discrete, semantic, helper functions that ease passing data to the dispatcher
  23. Callback/Registry Stores register themselves and provide a callback for the Dispatcher to send payloads to This is the single entry point into each store for all mutations to take place All of your getters can be publicly exposed in your stores so that your React Components can interrogate current state. Dependencies waitFor accepts Store tokens so that you can explicitly tell the dispatcher which stores you want to update first You can create cycles