Vor einigen Tagen habe ich versucht, die Frage Was ist Architektur?, die mir Peter Bucher einige Wochen zuvor gestellt hat, zu beantworten. Peter hat daraufhin meinen Eintrag direkt aufgegriffen und ihn in einem eigenen Eintrag um einen wesentlichen Aspekt ergänzt.
Ein guter Anfang um den Zielen "Qualitativ gute Software" und "Entwickler" Rechnung zu tragen, ist sicher die vorgängige Auseinandersetzung mit den Anforderungen. Also auch mal den Block zur Hand nehmen. Etwas auf Papier bringen, aus verschiedenen Blickwinkeln betrachten und dann erst einen Prototyp zu bauen.
Diesen Sätzen möchte ich mich ohne jegliche Einschränkung anschließen, meiner Meinung nach kann man den Aspekt der Planung für die Architektur nicht genug betonen, er ist sozusagen die Essenz des Ganzen.
Doch warum ist das so? Warum ist eine vernünftige Planung so wichtig für die Softwareentwicklung?
Die Antwort ist simpel: Es liegt daran, dass grundlegende Korrekturen desto teurer werden, je weiter fortgeschritten das Projekt ist. Im Prinzip ist es wie beim Hausbau:
- Den Grundriss des Hauses auf dem Papier zu ändern, bevor mit dem Bau begonnen wurde, ist simpel.
- Den Grundriss des Hauses zu ändern, sobald das Fundament gelegt wurde, ist möglich, aber mit Aufwand verbunden.
- Den Grundriss des Hauses zu ändern, bevor abschließend das Dach aufgesetzt wird, ist extrem aufwändig und teuer.
Genauso verhält es sich bei der Softwareentwicklung: Je früher eine Änderung notwendig ist, desto weniger Code ist direkt (und indirekt!) betroffen und desto weniger langwierige Änderungen sind notwendig. Da jede Codeänderung zudem entsprechenden, eigentlich vermeidbaren, Testaufwand nach sich zieht, wird schnell klar, warum dies so ist.
Es rentiert sich also durchaus, eine Software zunächst grundlegend und detailliert zu durchdenken, bevor man sich an die Implementierung begibt. Besonders nützlich ist natürlich, wenn sich für gewisse Situationen bereits Lösungsansätze oder Vorgehensweisen bewährt haben, die man lediglich erneut einsetzen muss. Dann wird nämlich der Aufwand so wohl für die Planung wie auch für die Entwicklung geringer.
Daraus wird auch ersichtlich, warum Entwurfsmuster für die Softwarearchitektur eine so große Rolle spielen: Sie geben dem Architekten erprobte Werkzeuge an die Hand, um gewisse Aufgaben zu lösen. Für eine gute Architektur ist es zwar nicht ausreichend, Entwurfsmuster miteinander zu kombinieren, aber sie zur Hand zu haben und zu wissen, welches Entwurfsmuster man in welchem Kontext wie einsetzen kann, ist enorm hilfreich.
Außerdem erleichtern Entwurfsmuster die Kommunikation zwischen Architekten und Entwicklern, denn beide Seiten haben damit eine gemeinsame Terminologie, die exakt definiert wurde. So bleibt weniger Raum, in dem Missverständnisse entstehen können, und es lassen sich überflüssige Diskussionen vermeiden.
Häufig werde ich gefragt, wie man beginnen sollte, sich mit Architektur zu beschäftigen. Ich habe dafür zwar kein festes Schema, denn einen großen Teil macht schlichtweg die Erfahrung und die Beschäftigung mit der Materie aus, aber ich rate fast jedem Entwickler, der mich dies fragt, dazu, sich mit Entwurfsmustern auseinanderzusetzen und versuchen, zu verstehen, warum diese so und nicht anders aufgebaut sind.
Im Lauf der Zeit ergeben die einzelnen, zunächst isoliert erscheinenden Entwurfsmuster, dann ein Netz, das sich immer dichter verknüpfen lässt, und man beginnt, die Konzepte hinter den Entwurfsmustern zu verstehen. Ist dieser Punkt erst einmal erreicht, so kann man dies durchaus als einen gelungenen Start in die Welt der Architektur bezeichnen.