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.