Die letzten Wochen habe ich „Domain-Driven Design“ von Eric Evans gelesen (bei Lehmanns, Amazon). Ich finde, dieses Buch ist für Software-Entwickler sehr empfehlenswert, die sich des objektorientierte Programmiermodells bedienen.

Im Buch geht es darum, wie man gute Objektmodell für Fachdomänen erstellt (daher Domain-driven). Da es sich um ein ganzes Buch zu diesem Thema handelt, fängt es gar nicht erst bei „Substantive sind potentielle Klassen“ an, wie es sonst doch recht üblich in OO-Büchern ist. Evans stellt Patterns vor, die ganz unterschiedlichen Scope haben (von „Entities“ bis „Systemmetapher“) und stellt diese Patterns auch in Zusammenhang zueinander.

Das Ziel von domain-driven design sind „Deep Models“, d.h. Modelle und deren Implementierung (!!!), die aus der vertieften Analyse der Domäne entstehen. Ihr Mehrwert ist ein tiefes Verständnis der Domäne durch die Entwickler, eine größere Übereinstimmung im Wissen der Entwickler und Fachleute, verbesserte Wartbarkeit und vereinfachte Erweiterbarkeit.

Ganz klar wird allerdings herausgestellt, dass domain-driven design kein „must-have“ ist, sondern das es auch Alternativen gibt.

Domain-driven design bedeutet nicht up-front design, sondern: Modell und Implementierung gehören zusammen; das Modell benötigt das Feedback durch die Implementierung. Es wird durch vertiefende Kenntnis (das ist ein Prozess!) der Entwickler über die Domäne gewonnen, Refactoring überträgt neu gewonnene Kenntisse auf das Modell und damit die Implementierung.

Highlights für mich sind:

  • Unterscheidung zwischen Entities und Value Objects
  • Layers – so habe ich mir das schon immer vorgestellt
  • Ubiquitous Language – eine gemeinsame (Fach-)Sprache ist Voraussetzung für gute Kommunikation
  • Intention-Revealing Interfaces – verbessert Lesbarkeit des Codes, damit Wartbarkeit und Verständlichkeit
  • Bounded Context – in welchem Kontext gilt ein Modell überhaupt (davon kann es in einer Anwendung mehrere geben)
  • Responsibility Layers – Verantwortlichkeiten innerhalb eines Objektmodell in Schichten aufteilen

Das Buch kann man auch bei Safari online lesen.