Der MEAN Stack: Mehr als nur Durchschnitt

28. Januar 2016Dr. Fatih Gedikli

Die IT-Branche ist bekannt für ihre einfallsreichen Abkürzungen und waghalsigen Schlagwörter. Manchmal frage ich mich aber, ob es Zufall ist, dass einige Abkürzungen eine negative Konnotation hervorrufen – ACID, MongoDB oder mein Favorit HATEOAS, um nur einige Beispiele zu nennen… Oder gibt es da vielleicht einen tieferliegenden Zusammenhang zwischen der Namenswahl und der Gedankenwelt der Berufsgruppe, die diese Namen geprägt hat? Obwohl sich der Name „MEAN Stack“ in meiner Liste der Abkürzungen mit negativen Konnotationen hervorragend einreiht, ist der MEAN Stack allerdings mehr als nur „Durchschnitt“.

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 [1] und diesen einen Tag später auf dem offiziellen MongoDB-Blog einem größeren Publikum präsentierte [2].

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 [3].

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 [4] 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 [5], 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 [6] 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.

[1] https://thecodebarbarian.wordpress.com/2013/04/29/easy-web-prototyping-with-mongodb-and-nodejs/

[2] http://blog.mongodb.org/post/49262866911/the-mean-stack-mongodb-expressjs-angularjs-and

[3] http://theothersideofcode.com/building-full-javascript-application-stack

[4] Eric Evans: Domain-Driven Design. Tackling Complexity in the Heart of Software. Addison-Wesley, 2003, ISBN 978-0-321-12521-7

[5] http://roca-style.org

[6] https://www.meteor.com

Dr. Fatih Gedikli Dr. Fatih Gedikli ist Senior Software Engineer bei adesso mit großer Leidenschaft für JavaScript auf Client- und Serverseite. Als externer Lehrbeauftragter hält er an der Fachhochschule Dortmund die Vorlesungen Web Engineering 1 und 2.
Artikel bewerten:
1 Star2 Stars3 Stars4 Stars5 Stars
Loading...

Kommentare

Rolf Koch 12. Oktober 2016 Website des Autors

Daumen hoch für diesen guten Beitrag.
Ich arbeite seit einiger Zeit ebenfalls mit Meteor als Full Stack JS Framework. Wie in dem Beitrag beschrieben kann Meteor vor allem für kleine bis mittlere Web(-App)-Projekte genutzt werden. Besonders spannend ist die mitgelieferte Cordova Integration, welche im Sinne des Rapid Development gerade bei der Entwicklung von Hybridapps einzahlt. Auch die Features wie Hot Code Push sind „from Scratch“ mit an Board und bieten für spezifische Projekte (Meteor muss zum Projekt und dessen Anforderungen & Architektur passen) einen echten Mehrwert. Last but not least. Die nahtlose Integration und Synchronisation der MongoDB auf Serverseite und der Mini Mongo Instanz auf Clientseite bieten vielfältige Anwendungsszenarien.
Jedoch kommt man auf Grund der hohen Abstraktion in Projekten mit speziellen Anforderungen häufig an Grenzen. Grenzen im Sinne von: Irgendwann ist man sehr stark mit dem Customizing von Meteor beschäftigt und überschreitet den Trade-off an welchem das Aufsetzen eines MEAN-Stack (ggf. mit Express, Mongoose & Co.) from Scratch durchaus auch einen wirtschaftlichen Vorteil bieten kann. Ich beobachte insbesondere bei Unternehmen hier momentan ein starkes Defizit bei der Selektion geeigneter Kriterien zur Auswahl eines geeigneten MEAN Stack.

Dr. Fatih Gedikli 13. Oktober 2016 Website des Autors

Vielen Dank für das tolle Feedback!

Sascha Thattil 24. November 2016

Sehr interessanter Beitrag.

Wegen dem MEAN. Es muss ja nicht unbedingt „Durchschnitt“ bedeuten sondern auch „gemein“. Gemein in dem Sinne, dass es dem LAMP (Linux, Apache, MySQL, PHP/ Perl/ Python) Stack immer mehr Konkurrenz macht.

Das Konzept mit JavaScript ist meiner Meinung nach sehr interessant. Schwierigkeiten ergeben sich jedoch meistens in der praktischen Umsetzung. Es ist immer noch um ein vielfaches einfacher LAMP Experten zu finden, als dies für MEAN der Fall ist.

Auf der anderen Seite ist es wird es auch Zeit fuer einen „besseren“ Weg der Umsetzung von Webanwendungen. Hier habe ich auch wenig zum MEAN Stack geschrieben: http://www.yuhiro.de/lamp-versus-mean-ein-vergleich-unsere-erfahrung/

Danke nochmals für den informativen Beitrag.

Freundliche Grüsse
Sascha Thattil

Kommentar hinzufügen:

Ihr Kommentar: