Flow Design

Was ist Flow Design?

Erst kürzlich fand das Coding Dojo der .Net User Group Karlsruhe in unseren Räumlichkeiten statt. Hierbei ging es um das Thema Flow Design.

Doch was ist Flow Design überhaupt?
Bei Flow Design handelt es sich um eine Entwurfsmethode für Software, das heißt, dass hierbei keine Objektkonstruktionen bekannt sind und ausschließlich Funktionseinheiten integriert werden. Am Ende folgt die Implementation, bei der der Entwurf nach Flow Design in eine Sprache (z.B. C#) übersetzt wird.

Flow Design agiert über Datenflussdiagramme. Auftretende Probleme werden nach dem Divide und Conquer Prinzip so lange untergliedert und in Unterprobleme aufgeteilt, bis einfache Funktionseinheiten zur Lösung entstehen.
Flow Design bietet aufgrund der grafischen Darstellung eine Möglichkeit, Software gemeinsam im Team zu konzipieren, und zwingt die Entwickler ihre Gedanken, in Form von Datenflusszeichnungen zu formulieren.

Die Funktionseinheiten im Flow Design lassen sich in zwei verschiedene Aufgaben unterteilen. Dabei können die Einheiten entweder Logik ausführen oder mehrere Methoden integrieren ohne dabei jedoch selbst Logik auszuführen. Dabei ist zu beachten, dass die Funktionseinheiten immer nur jeweils eine der beiden Aufgaben erfüllen können.

Was ist jetzt hierbei Logik?
Unter Logik wird Code bezeichnet, der Verhalten herstellt. Das heißt, Code der Veränderungen von Zuständen herbeiführt. Dazu werden die folgenden Konstrukte zur Definition von Logik herangezogen: Expressions, da diese Werte von Input- zu Output-Werten umwandeln, API-Calls und Control Statements wie z.B. If-then-else, for, while etc.. Logik im Kontext des Flow Designs entsteht über Verzweigungen im Programmfluss, Schleifen und Wertzuweisungen.

Integrationsmethoden hingegen rufen lediglich andere Methoden auf, die Logik ausführen oder selber Methoden integrieren. Bei der Integration werden Methoden in einer bestimmten Reihenfolge aufgerufen und verwalten so den Datenfluss.

Aufgabenstellung

Im Coding Dojo haben wir eine Kata der Clean Code Developer School bearbeitet. Unter Function Katas versteht man kleine Aufgaben. Die Problemstellung der Katas ist ein Algorithmus, die Lösung wiederum besteht aus einer Funktion. Außerdem sind eventuelle Refaktorisierungen zu beachten (vgl. Clean Code Developer School). Ziel des Coding Dojos ist es, bei der Entwicklung die Prinzipien und Praktiken des CCD zu beachten und zu verinnerlichen.

Die konkrete Aufgabenstellung bei unserem Coding Dojo war wie folgt:

Schreibe eine Funktion, die Römische Zahlen [1] in Dezimalzahlen übersetzt.
Beispiele:

  •  „I“ –> 1
  • „II“ –> 2
  • „IV“ –> 4
  • „V“ –> 5
  • „IX“ –> 9
  • „XLII“ –> 42
  • „XCIX“ –> 99
  • „MMXIII“ –> 2013

Die Römischen Zahlen bewegen sich im Bereich von „I“ bis „MMM“.

Römische ZifferIVXLCDM
Wert1510501005001000

Nimm an, dass die Römischen Zahlen korrekt sind.

Herangehensweise

Zu Beginn der Aufgabe hat man die ein oder andere Idee, wie man an dieses Problem herangehen kann und welche Lösungen anzusetzen sind. Allerdings sollte man sich im ersten Schritt zunächst folgende Fragen stellen:

– Wie stelle ich sicher, dass in meinem Entwicklerteam jeder die gleiche Vorstellung von der Umsetzung des Problems hat?

– Was muss ich hierzu vor der Entwicklung beachten?

– Was kann hierbei zu Problemen führen?

Bei Flow Design geht es darum, die Lösung eines Problems an sich zu modellieren und nicht darum, wie es technisch umgesetzt werden soll. Es ist unabhängig von einer bestimmten Programmiersprache, weshalb auch keine Schlüsselwörter oder konkreten Datentypen in der Notation verwendet werden. Setzt man Flow Design konsequent um und trennt Integrationsmethoden von Operationen, wird automatisch das IOSP (Integration Operation Segregation Principle) erfüllt.

FromRomanNumerals, Coding Dojo generic.de AG

FromRomanNumerals, Coding Dojo generic.de AG

Umsetzung

Was war nun genau die Herausforderung bei der Aufgabenstellung? Es geht darum, Römische Zahlen in Dezimalzahlen umzurechnen. Im Flow haben wir dafür die Methode „int FromRomanNumerals (string romanNumber)“ deklariert. Auf dieser Ebene haben sich bei dem Problem die 3 Punkte „Übersetzen der römischen Ziffern in dezimale Ziffern“, „Ausgewählte Ziffern mit Vorzeichen versehen“ und „Summieren der Ziffern“ ergeben, die in entsprechenden Methoden implementiert wurden. Wie in einem Team üblich entstehen hier immer wieder Uneinigkeiten und unterschiedliche Lösungswege oder Ideen. Daher wurden, wo nötig, die Methoden nochmal im Detail entworfen bzw. diskutiert.

Fazit

Flow Design ist ein sehr gutes Mittel für ein Team, um ein gemeinsames Verständnis eines Problems zu erarbeiten und Aufgaben daraus abzuleiten. Diese können dann vom Team parallel abgearbeitet werden. Durch eine konsequente Umsetzung des IOSP Prinzips hat man schon per Design leicht testbare Methoden. So kann die Implementierung auch nach TDD (Test Driven Development) umgesetzt werden.

 

Julian, .NET-Softwareentwickler generic.de AG

Gastbeitrag von Julian Hohenöcker