In der Welt der Frontend Entwicklung existieren zahllose Frameworks in allen möglichen Sprachen, doch die meisten haben eines gemeinsam: Die Architektur. Seit vielen Jahren ist hier Model-View-Controller (MVC) Pattern der Platzhirsch, mit wenigen Model View ViewModel (MVVM) Vertretern.

Anwendungen werden immer komplexer und man konnte beobachten, dass Implementierungen des MVC-Musters sehr schlecht skalieren. Der bidirektionale Datenfluss zwischen Controller und View führt zu schwer nachvollziehbaren Zusammenhängen, speziell wenn eine View auf eine andere verweist oder Controller Views aktualisieren müssen, die nicht direkt zu ihnen gehören.

Hier hat Facebook angesetzt und mit Flux eine Applikationsarchitektur geschaffen, welche Lösungen zu diesen Problemen bietet.

Das Konzept ist einfach: Unidirektionaler Datenfluss in allen Schichten der Applikation (siehe Grafik).

Es gibt drei Hauptkomponenten zu jeder Flux Applikation. Der Dispatcher, die Stores und die Views.

1. Der Dispatcher existiert nur einmal pro Applikation und agiert als zentraler Manager des Datenflusses. Er hat keine eigene Logik, sondern verteilt Actions an alle Stores.
2. Die Stores beinhalten typischerweise logisch zusammenhängende Teile des Applikations Zustandes und die zugehörige Geschäftslogik wie diese Zustände zu verändern sind. Stores können Actions zum Dispatcher schicken.
3. Die Views zeigen die Daten aus den Stores für die User an und User können Actions auslösen welche zum Dispatcher gesendet werden.

Dieser Blogbeitrag entstand im Zuge einer Architekturumstellung von MVC auf Flux in einer sehr komplexen Komponente des Userinterfaces in einem unserer Projekte. Eine komplizierte Berechnung, bei der User-Eingaben, Daten vom Server, sowie eine Websocket-Verbindung vom Server zum Client Einfluß auf das Ergebnis hatten, war sehr fehleranfällig. Durch die neue Architektur war der Bug schnell gefunden und behoben. Wir möchten andere Entwickler dazu anstoßen, sich doch wieder Gedanken über das Thema der Frontend-Architektur zu machen, ein Problem, welches lange eine selbstverständliche und eindeutige Lösung hatte.