Moderne Archi­tek­tur für Web-Anwendungen & Domain-Driven Design

Fit für zukünftige Anforderungen durch eine verständliche Projekt­struktur

Uni-Bibliothek Freiburg
Auffällige Architektur – die Uni-Bibiliothek Freiburg (auch bekannt als Todesstern)
Das Gegenteil von “gutem Design” ist nicht “kein Design” sondern “schlechtes Design”.
Mathias Verraes, Veranstalter der DDD Europe Konferenz

Eine Anwendung soll die fachlich notwendige Komplexität abbilden – gleichzeitig aber technisch nicht unnötig kompliziert sein. Nur so können Sie aktuelle und zukünftige Anforderungen mit angemessenem Aufwand umsetzen.

Eine moderne Software-Architektur für Web-Anwendungen reagiert bei nicht-funktionalen Anforderungen und Belangen der Infrastruktur flexibel; also etwa bei Themen wie Performance, Umzug in die Cloud oder Austausch einer Software-Bibliothek. Außerdem gibt sie eine verständliche Projektstruktur vor. Um hingegen die fachlichen Prozesse angemessen zu modellieren, bietet das Domain-Driven Design strategische und taktische Ansätze.

Auch Legacy-Anwendungen lassen sich schrittweise (und wirtschaftlich sinnvoll) einer neuen Architektur annähern.

Im Wesentlichen strukturieren wir Ihr Projekt in fachlich weitestgehend unabhängige Module. Innerhalb der einzelnen Module trennen wir zudem den fachlichen Kern von technischen Infrastruktur-Belangen (etwa dem Datenbankzugriff oder dem Lesen und Schreiben von Excel-Dateien).

Damit wird Ihre Anwendung nicht nur verständlicher. Auch der langlebige, fachliche Kern Ihrer Anwendung ist unabhängig von den deutlich kürzeren Lebenszyklen eines Frameworks oder anderer Infrastruktur-Komponenten. Dies hat zwei Vorteile: Erstens können Sie den fachlichen Kern Ihrer Anwendung viel einfacher weiter entwickeln; und zweitens können Sie externe Abhängigkeiten schneller aktualisieren oder durch leistungsfähigere Alternativen ersetzen.

Die konkrete Umsetzung ist projektabhängig:

Im einfachsten Fall ist dies ein gut strukturierter, modularer Monolith aus “langweiligen”, aber anspruchslosen und gut beherrschbaren Technologien (etwa PHP und MySQL). Schon damit lassen sich hoch performante und skalierbare Anwendungen bauen.

Bei besonderen Anforderungen oder umfangreichen Projekten wird daraus schrittweise ein message-basiertes, cloud-natives System aus unabhängigen Micro-Services mit CQRS und Event-Sourcing, das SQL- und NoSQL-Datenbanken optimal nutzt. (Genug der Buzz-Words!)

mehr konzeptionelle Details

In der Folge sind Ihre Entwickler produktiver, weil die Anwendung in überschaubare, gut beherrschbare Einheiten mit klaren Verantwortlichkeiten aufgeteilt ist. So lassen sich fachliche und nicht-fachliche Anforderungen mit angemessenem Aufwand umsetzen. Und auch automatisierte Tests sind deutlich einfacher zu schreiben.