Software-Architektur: Zerschneide nicht den Elefanten – erschaffe lieber ein Paradies
Passende Themen: Software-Architektur, Software-Design, Softwaremodellierung
Wenn jemand über Software-Architektur nachdenkt, bekommt er häufig die Empfehlung, den Elefanten in Scheiben zu schneiden (“slice the elephant”). Z.B. wenn Du einen kleinen, aber feinen Haustier-Shop entwerfen möchtest, musst Du ihn in einzelne Scheiben schneiden.
Aber für mich klingt „Schneide den Elefanten in Scheiben“ sehr fremd: Auch ein Elefant in Scheiben ist schwierig zu handhaben. Denn auch die Scheiben können sehr groß sein (selbst wenn sie wesentlich kleiner sind, als der ursprüngliche Elefant). Mehr noch: Die Scheiben gehören nur zu einem spezifischen Elefanten.
In diesem Moment denkst Du wahrscheinlich: Worüber redet die eigentlich? Ich rede über Software-Entwurf.Auch wenn Du den Elefanten in Scheiben schneidest und eine sogenannte n-tier Software entwirfst, bekommst Du einen Monolithen am Ende. Auch wenn Du Schnittstellen benutzt, funktionieren diese Schnittstellen nur in Deinem spezifischen Fall von Software. Andere Teile Deiner Infrastruktur können Deine Services nicht benutzen, da sie spezifisch für Deinen Entwurf sind. Das heißt, wenn Du nur Scheiben eines Elefanten hast und Du fügst sie zusammen, dann bekommst Du niemals eine Maus oder noch nicht einmal einen anderen Elefanten.
Wenn Du aber spezifische Funktionen Deines E-Commerce-Shops entwirfst, wie etwa Suche oder Detail-Ansichten, dann wirst Du wahrscheinlich in der Lage sein, sie nicht nur in Deinem Haustier-Shop, sondern z.B. auch in einem virtuellen Kunstmuseum zu verwenden.
Also, erschaffe ein Paradies mit unabhängigen Teilen – Bäume mit Früchten, Affen und Eseln, Blumen und Gras, Katzen und Mäuse, Schafe und Ziegen, der Schlange 🙂 und so weiter. Alle Pflanzen und Tiere können für sich selbst existieren, obwohl sie miteinander interagieren. Die Ziegen fressen das Gras oder die Affen die Früchte von den Bäumen. Aber es ist ein Paradies, daher fressen die Katzen die Mäuse nicht 🙂 . Wir wollen Services entwerfen, die unabhängig voneinander funktionieren, aber die miteinander arbeiten können.
Also: Schneide den Elefanten nicht in Scheiben, sondern erschaffe ein Paradies, in dem vielleicht auch der Elefant leben kann 🙂 .
Hallo, komme leider nicht mit diesem Textteil so draus.
“Wenn Du aber spezifische Funktionen Deines E-Commerce-Shops entwirfst, wie etwa Suche oder Detail-Ansichten, dann wirst Du wahrscheinlich in der Lage sein, sie nicht nur in Deinem Haustier-Shop, sondern z.B. auch in einem virtuellen Kunstmuseum zu verwenden.”
Also, ein Kunde von mir hat einen Tierfutter Webshop. Es wäre hilfreich wenn man seine Suchfunktion auf dem Shop so ausbaut damit es zum virtuellen Kunstmuseum wird?
Ich weis, die Frage ist ein bisschen komisch, ich versuche es mir auch immer bildlich wie im obigen Text zu merken.
Naja, nicht ganz 🙂 Es geht einfach darum, einzelne Funktionen, wie etwa die Suche, möglichst universell zu konzipieren. Denn dann kann man diese Funktionen nicht nur im Tierfutter-Shop verwenden, sondern auch für (nahezu) jede beliebige andere Website oder Webshop. Das macht vor allem dann Sinn, wenn man nicht nur eine Website hat bzw. als Programmierer / Dienstleister / Lösungsanbieter nur einen einzigen Kunden, sondern mehrere (z.B. neben dem Tierfuttershop noch ein Kunstmuseum)… Dann spart man sich nämlich die Arbeit, jedesmal das Rad neu erfinden zu müssen…