Unter Software-Architektur verstand ich bislang immer die Gestaltung der grundsätzlichen Arbeitsweise einer zu entwickelnden Anwendung. Dazu gehört erst einmal die Frage nach der Gestaltung der
GUI, aber auch andere Fragen, z.B.:
- Wie soll das Ganze am Ende aussehen?
- Soll sich alles in einem Fenster abspielen?
- Arbeite ich mit Frames oder mit TabSheets?
- Lege ich Wert auf intuitive Bedienbarkeit?
- Wie gestalte ich die GUI so, daß sie für den Anwender übersichtlich bleibt?
- Setze ich auf einzubindende Module, die bei Bedarf zusätzlich erworben werden können?
- Setze ich mehr auf Menüsteuerung oder stehen Buttons und Toolbars im Vordergrund?
- Baue ich, um mit mehreren Dokumenten gleichzeitig umgehen zu können, eine MDI-Anwendung oder mache ich das wie bei MS-Word, daß für jedes Dokument die gesamte Anwendung wiederholt referenziert wird?
- Verwende ich kommerzielle Fremdkomponenten oder entwickle ich mir meine eigenen?
Das könnte man sicher noch um etliche Punkte ergänzen. Zur Software-Architektur gehört meiner Einschätzung nach aber auch die Frage, wie ich "intern" vorgehe:
- Habe ich überhaupt einen Plan oder programmiere ich eher "wild drauflos"?
- Arbeite ich direkt mit der Datenbank oder verwende ich Klassen (Objekte), um die Daten bereitzustellen und zu bearbeiten?
- Wie flexibel soll meine Anwendung hinsichtlich ihrer Verwendbarkeit sein? Z.B. bei Datenbank-Anwendungen mit Firebird: Wie gestalte ich die Anwendung so, daß sie wahlweise als StandAlone (Embedded-DB), als Serverversion mit lokalem oder Remote-Server einsetzbar ist?
- Welche Bereiche eines Projekts lagere ich in DLLs aus, so daß sie von anderen Projekten wieder verwendet werden können?
- Wie organisiere ich Units, um auch nach Jahren nahezu sofort den Überblick zu erhalten?
- Halte ich mich strikt an die Objektorientierung oder weiche ich bei Bedarf davon ab?
- Baue ich meine Anwendung modular auf und halte die Zuständigkeiten übersichtlich?
Derzeit präferiere ich die Arbeit mit Frames, die jeweils ein Modul darstellen und alle von einem Default-Frame abstammen, der bereits wichtige Methoden und Deklarationen enthält, die zur Verwaltung der Frames benötigt werden. Damit hab ich inzwischen mehrere Projekte absolviert, so daß ich diese Architektur mehr oder weniger verinnerlichen konnte. Damit habe ich nun eine Grund-Architektur für Projekte mit Frames, die als Vorlage für weitere Projekte dienen. Das verstehe ich unter Software-Architektur: Eine bestimmte Vorgehensweise, ein bestimmtes Konzept, bestimmte strikte Regeln, die eingehalten werden müssen und durch all das eine konkrete Linie, entlang der ein Projekt entwickelt wird.