Gedanken zu Software Architektur

Software scheint für viele Menschen etwas Mystisches zu sein. Das Spektrum reicht von einem Verteufeln bis hin zu einer Verehrung als Allheilmittel. Und das nur weil man sie nicht wirklich anfassen kann. Dabei ist Software auch ein Produkt wie alle andere Sachen. Sie fällt nicht Himmel. Sie schreibt sich nicht alleine und wenn man gute Qualität möchte, muss man auch Wissen, Zeit und Geld investieren. Gute Qualität und Zuverlässigkeit setzen Erfahrung und eine gute Planung Voraus.

Leider haben auch vermeintliche Experten oder alte Hasen oft kein Gespür dafür. Es werden Hanebüchene Ideen und Vorstellungen verbreitet, die zwar auf ein Software Projekt mit wenigen hundert Zeilen Quelltext zutreffen können. Mit 10000 aber schon kläglich scheitern.

Dies soll an dem Beispiel von Softwarelayern (Softwareschichten) illustriert werden. Oft werden dort getroffene Vorgaben als unnötige Einschränkung von Programmierern betrachtet. Da Software schlecht Fassbar ist, soll ein Bierkasten zur Besseren Illustration dienen.

Ein Bierkasten ist in den meisten Fällen eine einteilige Plastik Kiste, die speziell dazu konstruiert ist, Bierflaschen aufzunehmen. Zur einfacheren Darstellung gehen wir jetzt nur von drei Flaschen aus. Wir Unterteilen das ganze jetzt in unterschiedliche Bereiche. Zuerst wäre da die Schicht (Layer) des Bodens. Auf den Untergrund wollen wir nicht so genau eingehen. Als einzige Bedingung muss gelten das die Kiste einigermaßen eben stehen kann, ohne umzukippen. Ob Asphalt, Sand, Beton, Eis oder Holz ist völlig egal.

Layer1

Damit hätten wir auch schon die erste Eigenschaft eines Softwarelayers gefunden. Wenn die Schnittstelle definiert ist, kann der Unterbau geändert werden. Bei Software kann z.B. das Physikalische Übertragungsmedium ausgetauscht werden, ohne die oberen Schichten ändern zu müssen. Unter der Voraussetzung, das man eine gute Architektur hat.

Als zweiten Layer nehmen wir die Kiste. Die ist dazu da viele Flaschen transportieren zu können. Sie schützt gegen Beschädigung, hat aber nichts mit dem eigentlichen Inhalt zu tun.

Layer2

Der dritte Layer ist die Flasche. Hier haben wir eine genormte Form. Die Flaschen sind beliebig austauschbar. Es ist egal welche Flasche sich an welcher Stelle befindet. Es können auch Flaschen fehlen. Der Layer Kasten ist also in keinster Form von den Flaschen abhängig. Nur finden wir als Anwender einen leeren Bierkasten natürlich doof.

Layer3

Hier zeigt sich die zweite wichtige Eigenschaft. Ein übergeordneter Layer ist auch austauschbar. Solange die Flaschenform identisch ist. Ist egal von welchem Hersteller die Flasche stammt.

Der vierte Layer ist der Inhalt der Flasche. Das ist das eigentlich wichtige Produkt für uns. Der Boden, die Kiste und auch die Flasche sind nur Mittel zum Zweck für eine gute Handhabbarkeit.Auch hier gilt wieder, das der Inhalt der Flasche beliebig ausgetauscht werden kann. Und zwar ohne das es Auswirkungen auf die anderen Layer hat. Egal ob Bier, Schnaps, Brause oder Wasser, sie funktionieren immer gleich. Das Stapeln von Kisten und der Flaschenverschluss werden jetzt außer acht gelassen. Es ist schon komplex genug.

Software Layer
Software Schichten am Beispiel einer Bierkiste

Bei einer Bierkiste würde nie jemand auf die Idee kommen, die Funktion der Flasche von der Kiste Abhängig zu machen. Z.B. das sie nur Dicht hält, solange sie sich in der Kiste befindet. Es würde auch nie jemand auf die Idee kommen, eine Flasche zu konstruieren, deren Inhalt nur dann getrunken werden kann, wenn die sich in einer Orangen Kiste befunden hat. Ebenso wenig würde man alle Flaschen untrennbar mit der Kiste verbinden oder alle anderen Flaschen automatisch leeren, wenn eine entfernt wird.

Diese Ideen erscheinen natürlich völlig abstrus. Warum muss ich dann bei Software ständig so etwas sehen?