Programmarchitektur

Sprachübergreifende Prinzipien und Konzepte für das strukturierte Schreiben, Warten und Erweitern von Quelltext

Einleitung

Zuerst wird der Unterschied zwischen Effektivität (Maximalprinzip) und Effizienz (Minimalprinzip) besprochen.

Entscheidend für die Effektivität bei der Erstellung von Quelltext und die Qualität (Fehlerfreiheit und Effizienz) von erzeugtem Maschinencode ist, wie Anweisungen zu Quelltextblöcken zusammengefasst und diese miteinander verbunden werden. In Anlehnung an die Erschaffung von Bauwerken wird dieser wichtige Teilbereich der Programmierung als "Programmarchitektur" bezeichnet.

Im Kurs werden zuerst Qualitätsanforderungen besprochen und dann Ziele für die Erfüllung der Anforderungen formuliert. Dabei wird nicht nur das Ergebnis in Form von Maschinencode betrachtet, sondern auch das Vorgehen bei der Erstellung des Quelltexts.

Zur Orientierung wird kurz auf einige etablierte Lösungsansätze (Pattern) hingewiesen.

Als Quintessenz des Kurses werden dann formale Prinzipien und inhaltliche Konzepte vorgestellt, mit denen die Ziele einfach und zuverlässig erreicht werden können.

Anforderungen an Quelltext

Erzeugter Maschinencode muss funktionieren.

Erzeugter Maschinencode muss effizient sein.

Erstellung des Quelltexts muss effektiv sein.

Wartung muss problemlos möglich sein.

Erweiterungen müssen problemlos möglich sein.

Ziele für die Umsetzung

Übersichtliche Projektstruktur

Keine redundanten Quelltextblöcke

Leicht nachvollziehbarer Programmierstil

Transparente Verbindung der Quelltextblöcke

Aussagekräftige Namensgebung

Formale Prinzipien für das Erreichen der Ziele

Für Klassen jeweils eine Datei

Trennung von View und Business Logic

Trennung der View in deklarative Markupsprache und Codebehind

Trennung der Business Logic nach Aufgabenbereichen

Trennung der Aufgabenbereiche in Controller und Services

Eigene Klasse für alle Konstanten

Eigene Klasse für in mehreren Klassen verwendete Variablen

Startup-Klasse für Setup von Variablen

Aussagekräftige Ordnerstruktur

Inhaltliche Konzepte für die Umsetzung der Ziele

Single-Responsibility-Prinzip für Klassen und Methoden

Verwendung der Zugriffsmethoden von Properties

Interfaces mit Interface Segregation

Klassenhierarchie mit Dependency Injection

Programmsteuerung mit Klassen und Methoden (Domain-Driven)

Programmsteuerung mit Events (Event-Driven)

Statische Variablen für Ergebnisse