Software Architecture - Cheatsheet
Singleton Pattern: Sorgt dafür, dass eine Klasse nur eine Instanz hat.
Definition:
Stellt sicher, dass eine Klasse genau eine Instanz hat.
Details:
- Nützlich für globale Zustände oder Konfigurationen.
- Implementierung meist durch eine statische Methode, die die einzige Instanz zurückgibt.
- Thread-Sicherheit beachten!
- Beispiel in Java:
class Singleton { private static Singleton instance; private Singleton() {} public static Singleton getInstance() { if (instance == null) { synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; }}
Microservices: Zerlegung der Anwendung in eine Sammlung kleiner, lose gekoppelter Dienste.
Definition:
Aufteilung einer monolithischen Anwendung in eine Sammlung kleiner, unabhängig von einander arbeitender Dienste.
Details:
- Jeder Dienst ist eigenständig und führt eine spezialisierte Aufgabe aus.
- Dienste kommunizieren über APIs (typischerweise RESTful oder gRPC).
- Ermöglicht unabhängiges Skalieren und Entwickeln der einzelnen Dienste.
- Erfordert ein durchdachtes Deployment und Monitoring der einzelnen Dienste.
- Höhere Komplexität in Bezug auf Datenkonsistenz und Transaktionen.
- Benötigt DevOps-Tools und Continuous Integration/Continuous Delivery (CI/CD).
Extreme Programming (XP): Fokus auf technische Exzellenz und fortlaufende Feedbackschleifen.
Definition:
Extreme Programming (XP) ist eine agile Softwareentwicklungsmethode, die sich auf technische Exzellenz und ständige Feedbackschleifen konzentriert.
Details:
- Technische Exzellenz: Praktiken wie Testgetriebene Entwicklung (TDD), kontinuierliche Integration, Refactoring.
- Feedbackschleifen: Regelmäßige Code-Reviews, Pair Programming, häufige Releases und stand-up Meetings.
- Kernwerte: Kommunikation, Einfachheit, Feedback, Mut und Respekt.
- Iterativ und inkrementell: Entwicklung erfolgt in kurzen Zyklen mit laufenden Anpassungen.
Wartbarkeit: Fähigkeit des Systems, Änderungen einfach umzusetzen.
Definition:
Wartbarkeit: Fähigkeit des Systems, Änderungen einfach umzusetzen.
Details:
- Modularität: Unabhängige Module erleichtern Änderungen.
- Dokumentation: Hilft, den Code zu verstehen.
- Testbarkeit: Automatisierte Tests vereinfachen Überprüfung von Änderungen.
- Lesbarkeit: Klare und verständliche Code-Struktur.
- Kohäsion und Kopplung: Hohe Kohäsion und niedrige Kopplung fördern Wartbarkeit.
- Versionskontrolle: Nachvollziehbarkeit von Änderungen.
Architekturdiagramme: Grafische Darstellung der Systemkomponenten und ihrer Beziehungen.
Definition:
Grafische Darstellung der Systemkomponenten und ihrer Beziehungen.
Details:
- Dienen zur Visualisierung der Struktur eines Softwaresystems.
- Unterstützen die Kommunikation zwischen Stakeholdern.
- Ermöglichen eine bessere Planung und Analyse von Systemarchitekturen.
- Typen: UML-Diagramme, Schichten- und Komponenten-Diagramme, C4-Modell.
- Ziele: Klarheit, Übersicht, Wartbarkeit, und Skalierbarkeit des Systems.
Event-Driven Architecture: Reaktion auf und Verarbeitung von Ereignissen in Echtzeit.
Definition:
Architekturmuster, das Ereignisse in Echtzeit bemerkt und darauf reagiert, oft verwendet für Systeme, die auf Änderungen schnell reagieren müssen.
Details:
- Zentrale Konzepte: Ereignisse, Event Producer, Event Consumer, Event Broker
- Ereignisse (Events) sind signifikante Änderungen im Systemzustand
- Produzenten erzeugen Ereignisse, Konsumenten verarbeiten sie
- Event Broker vermittelt Ereignisse zwischen Produzenten und Konsumenten
- Vorteile: Skalierbarkeit, Entkopplung, Reaktivität
- Nachteile: Komplexität, potenzielle Inkonsistenzen
- Verwendete Technologien: Apache Kafka, RabbitMQ, AWS Lambda
Skalierbarkeit: Fähigkeit, den Umfang und die Leistung der Software zu erhöhen.
Definition:
Fähigkeit einer Software, auf zunehmende Last oder Benutzeranforderungen mit Erweiterung in Kapazität oder Leistung zu reagieren.
Details:
- Vertikale Skalierung: Erhöhung der Ressourcen (z.B. CPU, RAM) eines einzelnen Servers.
- Horizontale Skalierung: Hinzufügen weiterer Server zur Bewältigung der Last.
- Wichtig für hohe Verfügbarkeit und Performance.
- Muss bereits in der Entwurfsphase berücksichtigt werden.
- Messbare Kenngrößen: Durchsatz, Latenz, Antwortzeiten.
UML: Universelle Modellierungssprache zur Dokumentation und Planung von Systemen.
Definition:
Visualisierungs- und Modellierungssprache für die Planung und Dokumentation von Softwaresystemen. Standardisiert in der Informatik für objektorientierte Modellierung.
Details:
- Use-Case-Diagramme: Visualisierung von Benutzer-Interaktionen
- Klassendiagramme: Struktur und Beziehungen von Klassen
- Sequenzdiagramme: Ablauf von Prozessen und Nachrichten
- Aktivitätsdiagramme: Modellierung von Workflows
- Zustandsdiagramme: Darstellung von Zustandsänderungen