© Excellent backgrounds/Shutterstock.com
Teil 4: Flow Design mit Scala

Treppengeplätscher


Der Flow-Design-Ansatz ist so fundamental wie der objektorientierte oder der funktionale, sodass sich die Umsetzung als eigenständiges Sprachkonstrukt geradezu aufdrängt. Doch es muss nicht gleich eine eigene Programmiersprache sein. In Scala lassen sich über interne DSLs Spracherweiterungen hinzufügen.

Artikelserie

Teil 1: Flow Design: ein neuer Ansatz für Softwaredesign

Teil 2: IODA: ein neuer Ansatz für Softwarearchitekturen

Teil 3: Flow Design in Java implementieren

Teil 4: Flow Design mit Scala

Teil 5: Implementierung von Scalaflow

Das Grundprinzip des Flow-Design-Ansatzes ist die gegenseitige Nichtbeachtung [1] der beteiligten Funktionseinheiten einer Abstraktionsebene. Sie sollen sich nicht kennen, um so konsequent Abhängigkeiten zu vermeiden. Nur die Funktionseinheit, die diese über ihre Ports miteinander verbindet, hat Abhängigkeiten zu den integrierten Funktionseinheiten. Enthält eine solche integrierende Funktionseinheit keine weitere Logik außer die integrierten Funktionseinheiten zu verbinden, implementiert sie das Grundprinzip einer IODA-Architektur, in der Integration und Operation strikt voneinander getrennt werden [2].

kuniss_scalaflow_1.tif_fmt1.jpgAbb. 1: Schema einer Funktionseinheit im Flow Design

Eine Funktionseinheit im Flow Design folgt dem Muster wie in Abbildung 1 gezeigt. Nachrichten erreichen eine Funktionseinheit über einen Port, Ergebnisse verlassen eine Funktionseinheit über einen Port. Dies entspricht dem EVA-Prinzip, dass wir auch aus der funktionalen Programmierung kennen und das Wikipedia als das Grundprinzip der Datenverarbeitung beschreibt [3]. Eine Funktionseinheit ist damit nur von den Typen der einfließenden und ausfließenden Nachrichten abhängig – eine natürliche Abhängigkeit und auch eine unvermeidbare.

Eine Scalaflow DSL

Die Scalaflow DSL ist in mehreren Schritten während der Auseinandersetzung mit der Sprache Scala entstanden. Es ist eine mögliche Realisierung einer Flow Design DSL. Die DSL verwendet das Scala-Sprachkonstrukt der Traits, um Ports zu realisieren. Des Weiteren werden spezielle Operatoren definiert, um das Verbinden der Ports in integrierenden Funktionseinheiten zu spezifizieren und die Ausleitung der Berechnungsergebnisse in Ausgabeports anzugeben. Aber wie sieht dies im Detail aus? Eine Funktionseinheit wird als Klasse von der Basisklasse FunctionUnit abgeleitet. Ports werden als generische Traits InputPort und OutputPort deklariert, mit denen diese Klasse dekoriert wird. So würden z. B. die beiden Ports einer Funktionseinhe...

Exklusives Abo-Special

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang