Einführung
Was also ist Softwarearchitektur und warum sollten Sie sich dafür interessieren? In diesem Artikel möchte ich mich mit diesem Thema beschäftigen und Ihnen die Vorteile einer guten Softwarestruktur und eines guten Designs aufzeigen. Dieser Artikel ist für Programmierstudenten oder Fachleute mit Erfahrung in der Spieleprogrammierung gedacht. Ich werde C# als Demonstrationssprache verwenden und Unity wird unsere Referenz Game Engine sein. Streng genommen ist dieser Artikel so unabhängig wie möglich von beiden – das Hauptziel ist es, zu erklären, was eine gute Architektur ausmacht und was eine gute Architektur für Sie und Ihre Projekte tun kann. Wenn Sie mehr über Softwarearchitektur gelernt haben, kann Ihnen das vielleicht sogar dabei helfen, ein Softwareentwickler zu werden. Fangen wir also an.
Was ist Software-Architektur?
Unity ist eine fantastische Spiel-Engine, aber der Ansatz, zu dem neue Entwickler ermutigt werden, eignet sich nicht gut für das Schreiben großer, flexibler oder skalierbarer Code-Basen. Dies gilt für fast alle großen Game Engines. Insbesondere die standardmäßige Art und Weise, wie Unity Abhängigkeiten zwischen verschiedenen Spielkomponenten verwaltet, ist oft umständlich und fehleranfällig. Was wir tun können, um dies zu verhindern, ist, unseren Projektumfang frühzeitig zu umreißen und mit dem, was wir in dieser Phase wissen, ein Softwaredesign zu planen, das den Anforderungen unseres Kunden und des Projekts entspricht.
Eine der besten Wahrheiten, die ich bei der Softwareentwicklung gelernt habe, ist, dass nicht einmal der Kunde weiß, was er will. Im Allgemeinen stelle ich fest, dass man mir in einer Woche eine Liste von „Must Haves“ vorlegen kann, und in der darauffolgenden Woche ist die Hälfte davon vielleicht schon die letzten Streichungen aus einem Projekt. Die Verwendung von Software-Entwurfsmustern kann dazu beitragen, die Auswirkungen drastischer Änderungen an der Codebasis abzumildern, vorausgesetzt, man denkt an die Bedürfnisse des Kunden und hat ein gewisses Verständnis für den Bereich, in dem man arbeitet.
Was ist gute Software?
Bevor wir uns über Designprinzipien Gedanken machen, wäre es gut, hier anzusetzen und zu definieren, wonach wir eigentlich suchen. Softwarearchitektur ist sinnlos, wenn wir sie nicht zur Unterstützung unserer Ziele einsetzen. Und bevor wir sie nutzen können, müssen wir wissen, was gute Software ist.
- Gute Software ist funktional. Wenn eine Software nicht in der Lage ist, ihre Kernfunktionen auszuführen, ist sie nutzlos.
- Gute Software ist robust. Das bedeutet, dass gute Software resistent gegenüber Veränderungen und Fehlern in ihrem Umfeld ist, und dass sie in der Lage ist, Fehler zu erkennen und zu beheben.
- Gute Software ist messbar. Es hat einige Zeit gedauert, bis ich mir diese Eigenschaft zu eigen gemacht habe. Es sollte möglich sein zu sehen, wie gut sich der Code außerhalb einer Testumgebung verhält. In der Regel lässt sich am besten messen, wie die Software die geschäftlichen Anforderungen erfüllen kann. Ein guter Maßstab für eine Benutzeroberfläche ist, wie lange es dauert, bis sie geladen ist oder auf eine Interaktion reagiert.
- Gute Software ist debuggbar. Das bedeutet nicht, dass man einfach so alles protokollieren kann, aber die Möglichkeit, bei Bedarf Debugging in großen Mengen durchzuführen, kann sehr praktisch sein.
- Gute Software ist wartbar. Eine Software kann einfach zu warten sein, wenn sie ein konsistentes Design hat, gut kommentiert ist, modular ist, usw. In der Tat gibt es viel Literatur über gutes Softwaredesign, die sich auf Designprinzipien konzentriert, die es einfach machen, Änderungen an Teilen der Software vorzunehmen, ohne die Funktionalität zu zerstören.
- Gute Software ist wiederverwendbar. Die Verallgemeinerung einer Lösung kann schwierig und zeitaufwendig sein. Wenn Sie sich also nicht absolut sicher sind, dass Sie diesen Teil der Funktionalität an anderer Stelle wiederverwenden werden, können Sie den Aufwand für die Wiederverwendbarkeit zeitlich begrenzen.
- Gute Software ist erweiterbar. Normalerweise beginnt das Gespräch mit – „aber nehmen wir an, dass morgen jemand X hier hinzufügen möchte…“ Software sollte mit dem Gedanken an Erweiterungen geschrieben werden, und diese Erweiterungen sollten so allgemein wie möglich gehalten werden. Wie bei dem allgemeinen Kopierbefehl aller Betriebssysteme ist es egal, wohin oder von wo man kopiert, es sind Erweiterungen des ursprünglichen Programms, die es unermesslich wertvoller machen.