Functional Core und irgendeine Shell

Functional Core… und irgendeine Shell

Funktionale Programmierung ist ziemlich cool! B-) Oder zumindest sind einige Features dieser Art der Programmierung sehr hilfreich bei der täglichen Arbeit. Nicht umsonst stellen immer mehr objektorientierte Sprachen auch funktionale Bestandteile bereit. Beispiele sind LINQ in C#, Blöcke in Ruby oder Streams in Java. Auch die Idee von Map/Filter/Reduce für die Arbeit mit Listen oder allgemein Datenmengen zähle ich jetzt mal dazu.

Gary Bernhardt hat in einem Screencast schon 2012 sein Konzept des Functional Core, Imperative Shell vorgestellt: Die Domäne der Software nutzt funktionale Programmierung und ihre Vorteile – wie z.B. Immutability und Seiteneffektfreiheit – ohne Zugriff auf die Infrastruktur. Und drumherum liegt eine „normale“ Schicht, die z.B. eine GUI bereitstellt, auf die Datenbank zugreift oder Webseiten generiert. Eben alles, was im funktionalen Kontext als „unrein“ zu bezeichnen wäre.

Giovanni Lodi greift in seinem Talk die Idee auf und ergänzt sie um eine weitere moderne Komponente: Functional Core Reactive Shell. Anstatt der „imperativen“ Shell verwendet er direkt eine reaktive. Falls du mit dem Begriff Reactive Programming noch nichts anfangen kannst, gibt es hier – analog zum agilen Manifest – das Reaktive Manifest.

Ich finde beide Ideen sehr interessant, auch wenn ich persönlich mit reaktiver Programmierung noch nichts zu tun hatte. Aber die Trennung zwischen einer „reinen“ Domäne und der „unreinen“ Außenwelt dürfte die automatischen Tests deutlich erleichtern, z.B. weil keine Mocks mehr nötig sind.


Verwendest du in deinem Code schon funktionale Konzepte? Oder setzt du sogar schon auf einen „funktionalen Kern“? Was sind deine Erfahrungen mit dieser Art zu programmieren?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax