28. Jänner 2016 von Dr. Faith Gedikli
Der MEAN Stack
Der MEAN Stack ist ein Full-Stack-JavaScript-Web-Framework zur einfachen und schnellen Entwicklung von Web-Anwendungen. Der Technologie-Stack besteht aus der dokumentenorientierten NoSQL-Datenbank MongoDB, dem serverseitigen Web-Framework Express, dem clientseitigen Frontend-Framework AngularJS und der serverseitigen Laufzeitumgebung Node.js. Die Bezeichnung „MEAN“ steht somit für die Anfangsbuchstaben dieser vier Komponenten und stammt ursprünglich von Valeri Karpov, einem MongoDB-Entwickler, der am 29. April 2013 den MEAN Stack in seinem Blogartikel „The MEAN Stack: MongoDB, ExpressJS, AngularJS, and Node.js“ veröffentlichte und diesen einen Tag später auf dem offiziellen MongoDB-Blog einem größeren Publikum präsentierte.
Anders als bei Web-Frameworks, die z.B. auf dem LAMP oder Java EE Stack basieren, wird im MEAN Stack JavaScript als primäre und einzige Programmiersprache durchgehend im Frontend, Backend und sogar innerhalb der Datenbank eingesetzt, um dadurch den Entwicklungsprozess zu vereinfachen und zu beschleunigen. Dazu muss fairerweise gesagt werden, dass die Idee, JavaScript client- und serverseitig durchgehend einzusetzen, nicht neu ist. Spätestens seit der Entwicklung von Node.js gab es in der Vergangenheit schon Bestrebungen, einen Full-Stack-JavaScript-Framework zu etablieren.
Programmiersprache für alle Schichten
Eine Programmiersprache für alle Schichten hört sich zwar schön an, ist aber in der Praxis beim MEAN Stack mit einem „Paradigmenbruch“ verbunden, der beim Wechsel einer Schicht vorkommt. So wird beim MEAN Stack im Frontend im MVVM-Muster mit AngularJS und im Backend im Pipes-and-Filters-Stil mit Express programmiert. Die Frontend-Entwicklung lässt sich somit nicht mit der Backend-Entwicklung vergleichen. Eine durchgehende Programmiersprache erleichtert sicherlich den Kontextwechsel, der aber immer noch vorhanden ist.
Die Popularität des MEAN Stacks ist vermutlich durch die Popularität der einzelnen Komponenten begründet. Die Kehrseite der Medaille ist, dass der MEAN Stack im strikten Sinne die einzelnen Komponenten vorgibt und die Einsatzszenarien des MEAN Stacks dem kleinsten gemeinsamen Nenner der Einsatzszenarien der einzelnen Komponenten entspricht.
Das heißt: Im MEAN Stack werden Dokumente im JSON-Format zwischen Client und Server ausgetauscht und in der NoSQL-Datenbank MongoDB persistiert. Dies löst oder verringert zumindest das objektrelationale Unverträglichkeitsproblem (Object-relational Impedance Mismatch), wenn die Dokumente Aggregate im Sinne des „Domain-driven Design“-Konzepts von Eric Evans (2003) enthalten. Beim Domain-driven Design werden Aggregate als Teilstrukturen definiert, welche Daten umfassen, die unbedingt:
- fachlich zusammengehören,
- konsistent bleiben müssen und
- in einer Transaktion verändert werden.
Die Aufgabe des Modellierens der Anwendungsdomäne und des Schneidens geeigneter Aggregate nimmt uns das Framework natürlich nicht ab. Wenn sich allerdings die Modelle der Domäne auf natürliche Art und Weise in Aggregate überführen lassen, können Anwendungen im Vergleich zu einer klassischen RDBMS leichter und schneller entwickelt werden. Aggregatbasierte Datenbanken sind von Vorteil, solange das Aggregat im Mittelpunkt steht und sich die Organisation der Daten in den meisten Fällen nicht ändert.
Sofern sich die Zusammensetzung der Daten häufig ändert (z.B. für das Reporting), muss man neue Aggregate typischerweise mittels Map-Reduce-Batch-Jobs berechnen, was aufwändig und kompliziert ist. In SQL hingegen können Daten viel einfacher reorganisiert werden. Zum Beispiel kann man verschiedenartige Tabellen über die JOIN-Klausel leicht integrieren. Kurz gesagt ist NoSQL und somit auch der MEAN Stack nicht die Lösung aller Probleme.
Außerdem sieht der MEAN Stack dank AngularJS die Entwicklung einer Fat-Client-Anwendung vor. Dies steht beispielsweise im krassen Gegensatz zum Architekturstil ROCA, der einen besonnenen und zurückhaltenden Einsatz von JavaScript auf Client-Seite fordert. In einem ROCA-konformen Client wird JavaScript unaufdringlich eingesetzt, um die Benutzerschnittstelle schrittweise zu verbessern (Progressive Enhancement). Die Anwendung sollte aber auch ohne JavaScript funktionieren. Fat-Client-Anwendungen sollten laut Architekturstil ROCA nur bei hoch interaktiven Anwendungsfällen eingesetzt werden (wie z.B. bei einem web-basierten Editor oder einem online CAD-System).
Fazit
Zusammengefasst lässt sich sagen, dass der MEAN Stack beim Aufsetzen einer Architektur für eine interaktive Web-Anwendung eine gute Diskussionsgrundlage bietet. Der MEAN Stack eignet sich aber nicht für jeden Anwendungsfall.
Wer das Installieren und Abstimmen der einzelnen Komponenten des MEAN Stacks als zu aufwändig empfindet, sollte sich das JavaScript-Framework Meteor näher anschauen. Meteor basiert ebenfalls auf Node.js und MongoDB, abstrahiert allerdings stark von den Komponenten und kann für kleine und mittlere Anwendungen durchaus hilfreich sein.