Michael Sperber Active Group GmbH

„Als Basis des Entwurfs verwenden wir ein klassisches taktisches Entwurfsmuster aus dem Domain-driven Design (DDD) und modellieren das Kartenspiel auf der Basis von Domain Events. Die Events repräsentieren jedes Ereignis, das im Spielverlauf passiert ist, die Commands repräsentieren Wünsche der Beteiligten, dass etwas passiert.“

Peter Thiemann Universität Freiburg

„Eine Vorbemerkung: „Unveränderliche Daten“ bedeutet, dass es keine Zuweisungen gibt, die Attribute von Objekten verändern können. Wenn Veränderung modelliert werden soll, so generiert ein funktionales Programm neue Objekte. Diese Vorgehensweise bietet enorme Vorteile.“

Der Entwurf von nachhaltigen Softwarearchitekturen ist eine Herausforderung: Mit der Größe steigt in vielen klassisch objektorientierten Softwareprojekten die Komplexität überproportional an. Durch viel Disziplin und regelmäßige Refaktorisierungen lässt sich das Problem eine Weile in Schach halten, aber die wechselseitigen Abhängigkeiten und komplexen Abläufe von Zustandsveränderungen nehmen mit der Zeit trotzdem zu. Die funktionale Softwarearchitektur geht an die Strukturierung großer Systeme anders heran als objektorientierte Ansätze und vermeidet so viele Quellen von Komplexität und Wechselwirkungen im System.

Funktionale Softwarearchitektur steht für das Ergebnis eines Softwareentwurfs mit den Mitteln der funktionalen Programmierung. Sie zeichnet sich unter anderem durch folgende Aspekte aus:

  • An die Stelle des Objekts mit gekapseltem Zustand tritt die Funktion, die auf unveränderlichen Daten arbeitet.
  • Funktionale Sprachen (ob statisch oder dynamisch) erlauben ein von Typen getriebenes, systematisches Design von Datenmodellen und Funktionen.
  • Statt starrer hierarchischer Strukturen entstehen flexible, in die funktionale Programmiersprache ein- gebettete domänenspezifische Sprachen.

Wir konzentrieren uns in diesem Artikel auf den ersten Punkt, also den Umgang mit Funktionen und unveränderlichen Daten. Dabei werden wir auch die Rolle von Typen beleuchten. Der Code zu diesem Artikel findet sich auf GitHub.

Funktionale Programmiersprachen

Funktionale Softwarearchitektur ist in (fast) jeder Programmiersprache möglich, aber in einer funktionalen Sprache wie Haskell, OCaml, Clojure, Scala, Elixir, Erlang, F# oder Swift ist diese Herangehensweise besonders natürlich. Funktionale Softwarearchitektur wird in der Regel als Code ausgedrückt, also nicht in Form von Diagrammen. Entsprechend benutzen wir für die Beispiele in diesem Artikel die funktionale Sprache Haskell, die besonders kurze und elegante Programme ermöglicht. Keine Sorge: Wir erläutern den Code, sodass er auch ohne Vorkenntnisse in Haskell lesbar ist. Wer dadurch auf Haskell neugierig geworden ist, kann sich eine Einführung in funktionale Programmierung, ein Buch zu Haskell oder einen Onlinekurs zu Gemüte führen.

Überblick

Wir erklären den Entwurf einer funktionalen Softwarearchitektur anhand des Kartenspiel Hearts, von dem wir nur die wichtigsten Teile umsetzen.

Den vollständigen Artikel lesen Sie in der Ausgabe:

Java Magazin 9.19 - "Ass im Ärmel?"

Alle Infos zum Heft
579901169Entwurf einer funktionalen Softwarearchitektur
X
- Gib Deinen Standort ein -
- or -