Scott Wlaschins Buch “Domain Modelling Made Functional. Tackle Software Complexity with Domain-Driven Design and F#” stand schon lang auf meiner Leseliste. Weil es immer wieder empfohlen wurde in Talks oder Artikeln. F# als Programmiersprache hat mich aber immer wieder davor zurückschrecken lassen, es endlich zu lesen. Im Nachhinein war das unnötig. Bis auf den let! Operator (mit Ausrufezeichen), war das Meiste sehr gut nachvollziehbar, wenn man von C# kommt.

Das Buch hat drei Teile: Im ersten geht es um Anforderungsanalyse und wie Domain Driven Design dabei helfen kann. Mit 50 Seiten geht für meinen Geschmack tief genug ins Detail, ohne sich ständig zu wiederholen. Im Zweiten Teil geht es um die fachliche Modellierung auf Basis eines Typ-Systems. Hierbei wird F# als Sprache so weit wie eben nötig eingeführt. Insbesondere Discriminated Unions und natürlich Pure Functions spielen hier eine zentrale Rolle. Im Dritten Teil wird der Code aus dem Beispiel implementiert. Im Dritten TEil ist wirklich viel F# zu lesen, allerdings mit einfacher Syntax. Nur das Konstrukt mittels let! fand ich erst verwirrend, in diesem Video wird es aber gut erklärt. Letztlich geht es darum, den Code aus fachlicher Sicht lesbarer zu machen, auf Kosten des technischen Verständnisses (für Nicht-F#-Programmierer).

Insgesamt fand ich das Buch lesenswert, auch wenn es für C# leider nicht 1:1 anwendbar ist. Die Discriminated Unions können mittels [[OneOf Package]] gut nachgebildet werden, auch wenn die Syntax mittels .Match() etwas unhandlich ist verglichen mit der F#-Syntax. Inhaltlich würde ich das Buch erst nach Grokking Simplicity von Eric Normand lesen. die Bücher überschneiden sich und Eric Normand empfiehlt Scott Wlaschins Buch auch, macht aber die Grundkonzepte für die Trennung von Daten, Pure Functions und Side Effects besser verständlich.