Flow Design entspricht eigentlich der Denkweise von Funktionaler Programmierung, es gibt Funktionen mit Input und Output,
die Anzahl von Input und Output kann beliebig sein und damit man kann die Funktionen verbinden.
Am besten stellt man sich das als eine Elektrische
Verdrahtung vor.
Die Daten fließen durch die Funktionen, werden also
transformiert und nicht in einer Objekt-Daten-Kapsel
mutiert, was es einfacher macht gedanklich den Überblick zu behalten, einfacher zu Testen ist und auch die
Skalierbarkeit (Stichwort Multicore) ist so einfach möglich (ohne die Gefahr von Deadlocks).
In F# wird ihnen auffallen, dass die ganzen Objekt-Konstrukte die man für Flow Design aufbauen muss, hinfällig werden und im Code am ehesten den Diagrammen entspricht.
Die Verdrahtung (wiring) kann viel eleganter mit dem
F# Pipe Operator (|>) gemacht werden.
Daten |> Validierung |> Auswertung
Der Datenfluss erfolgt in Pfeil |> Richtung.
Man kann den Flow auch untereinander schreiben.
Daten
|> Validierung
|> Auswertung
So fließen die
Daten durch die Funktion
Validierung dann die Funktion
Auswertung.
Und ob alles auch zusammen passt, das sagt ihnen der Compiler bevor es evtl. zu Laufzeitfehlern kommt.
Eine
Cheat-Sheet zu Flow-Design findet sich
hier.
Fazit
Wer Flow Design anwendet, kann sich viel Arbeit in der Codierung ersparen und gleichzeitig die
Qualität (Korrektheit, Lesbarkeit, Wartbarkeit) des Codes erhöhen, wenn man diesen
mit F# implementiert.