Enterprise Application Development und Evolutionäre Informationssysteme - Cheatsheet
Grundlagen von Software-Architekturen
Definition:
Grundkonzepte und Prinzipien zum Entwurf und zur Strukturierung von Softwaresystemen
Details:
- Ziel: Verständliche, wartbare und erweiterbare Systeme
- Layer-Architektur: Trennung der Systemebenen (Präsentation, Logik, Daten)
- Client-Server-Modell: Verteilung der Aufgaben zwischen Client und Server
- Mikroservices: Modularisierung durch kleine, unabhängige Dienste
- Design Patterns: Wiederverwendbare Lösungen für wiederkehrende Probleme (Singleton, Factory, etc.)
- SOLID-Prinzipien: Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, Dependency Inversion
- Wichtige Qualitätsmerkmale: Performance, Skalierbarkeit, Sicherheit, Testbarkeit
Architekturmuster und -stile
Definition:
Architekturmuster und -stile definieren die grundlegende Struktur von Softwaresystemen und beschreiben wiederverwendbare Lösungsansätze für häufig auftretende Entwurfsprobleme.
Details:
- Anwendung: Ermöglicht die Strukturierung und Organisation komplexer Systeme.
- Beispiele für Architekturmuster: Schichtenarchitektur, Client-Server, Microservices.
- Beispiele für Architekturstile: REST, SOAP, Event-Driven Architecture.
- Ziele: Wartbarkeit, Skalierbarkeit, Wiederverwendbarkeit, Flexibilität.
- Schichtenarchitektur: Vorteil: klare Aufgabentrennung, Nachteil: Leistungsüberhead.
- Microservices: Vorteil: hohe Skalierbarkeit und Unabhängigkeit, Nachteil: komplexer Betrieb.
- Client-Server: Vorteil: zentrale Verwaltung, Nachteil: Skalierungsprobleme bei hoher Last.
Kommunikationsmethoden zwischen Microservices
Definition:
Wege und Protokolle, die Microservices verwenden, um miteinander zu kommunizieren, oft asynchron und dezentral.
Details:
- REST (Representational State Transfer): HTTP-basiert, leichtgewichtig, oft für CRUD-Operationen
- gRPC: Protokoll mit Protobuf, schnelle und effiziente Kommunikation
- Message Broker (z.B. RabbitMQ, Kafka): Asynchrone Kommunikation, entkoppelt
- GraphQL: API-Abfragen, flexibel und effizient
- WebSockets: Bidirektionale Kommunikation in Echtzeit
Automatisierung von Build- und Testprozessen
Definition:
Prozess der automatischen Erstellung und Prüfung von Software zur Reduktion manueller Arbeit und Fehler.
Details:
- **Continuous Integration** (CI): Häufige Integration von Code in ein zentrales Repository mit automatischen Tests.
- **Continuous Delivery** (CD): Automatisierte Bereitstellung von Codeänderungen zur Produktion.
- **Build-Tools**: z.B. Maven, Gradle, Jenkins.
- **Test-Frameworks**: z.B. JUnit, Selenium, TestNG.
- **Vorteile**: Schnellere Fehlererkennung, Konsistenz, Zeitersparnis.
Strategien zur Migration und Modernisierung von Legacy-Systemen
Definition:
Strategien zur Umstellung alter Systeme auf moderne Technologien
Details:
- Big Bang Migration: Alle Komponenten auf einmal umstellen; risikoreich und teuer.
- Inkrementelle Migration: Schrittweise Umstellung; weniger riskant, komplexer.
- Parallelbetrieb: Alte und neue Systeme parallel laufen lassen; ermöglicht schrittweise Validierung.
- Wrapper: Legacy-Systeme mit einer neuen Schicht umgeben; erleichtert schrittweise Modernisierung.
- Rehosting: Verlagerung des alten Systems auf neue Infrastruktur ohne Code-Änderungen; minimaler Aufwand.
- Refactoring: Verbesserung der bestehenden Codebasis zur besseren Wartbarkeit; relativ aufwendig.
- Reengineering: Tiefgehende Überarbeitung inklusive Neuentwicklung von Komponenten; teuer, aber effektiv.
- Verwendung von APIs: Zugriff auf Legacy-Daten über moderne Schnittstellen; erleichtert Integration.
Lebenszyklus von Informationssystemen
Definition:
Enthält alle Phasen, die ein Informationssystem von der Planung bis zur Stilllegung durchläuft
Details:
- Planung: Problemdefinition und erste Analyse
- Systemanalyse: Strukturierte Untersuchung und Definition der Anforderungen
- Entwurf: Konzeptionelle und physische Gestaltung des Systems
- Implementierung: Programmierung und technische Realisierung
- Testen: Prüfung auf Fehler und Sicherstellung der Funktionalität
- Installation: Rollout des Systems in der Produktionsumgebung
- Wartung: Laufende Pflege und Anpassungen
- Stilllegung: Abschaltung und mögliche Ablösung durch ein neues System
Technische Schuld und Refactoring
Definition:
Technische Schuld: Kosten und Probleme, die durch schnelle, unsaubere Lösungen entstehen. Refactoring: Umgestaltung des Codes ohne Änderung des Verhaltens zur Verbesserung der Codequalität.
Details:
- Technische Schuld steigert Wartungskosten und Fehleranfälligkeit.
- Frühzeitiges Identifizieren und Managen von technischer Schuld notwendig.
- Refactoring zielt auf Lesbarkeit, Wartbarkeit und Testbarkeit ab.
- Tools: SonarQube zur Analyse technischer Schuld.
- Methoden: Clean Code, Design Patterns, Test Driven Development (TDD).
Best Practices für CI/CD
Definition:
Best Practices für CI/CD beinhalten die Methoden und Strategien, die angewendet werden, um Continuous Integration und Continuous Delivery in der Softwareentwicklung effektiv und effizient zu gestalten.
Details:
- Kleine, häufige Änderungen integrieren
- Automatisierte Tests in die Pipeline einbetten
- Feedback-Schleifen verkürzen
- Infrastruktur als Code nutzen
- Kontinuierliche Überwachung und Logging implementieren
- Security und Compliance in den Prozess integrieren
- Rollback-Strategien vorbereiten