Vorlesung 5: Architekturmuster und -stile (Architectural Styles and Patterns) Flashcards
Erkläre das Konzept der Architekturstile und Patterns
Architekturstile in der Softwarearchitektur
Definition: Architekturstile fassen gemeinsame Merkmale eines Softwaresystems zusammen.
Kategorien: Systeme desselben Stils bilden eine Kategorie von Systemen.
Unterscheidung von Mustern: Architekturmuster konkretisieren oft Architekturstile; beide Begriffe werden manchmal synonym verwendet.
Modularität: Typischerweise fördern Architekturstile Modularität und zyklusfreie Strukturen.
Arten von Architekturstilen:
-Strukturelle Stile
-Implementierungsstile
-Kommunikationsstile
-Ereignisbasierte Stile
-… und andere
Verwendung: Verschiedene Arten von Stilen werden oft in Kombination innerhalb eines einzigen Softwaresystems verwendet.
Aspekte der Architekturstile:
-Elementtypen: Welche Arten von Elementen umfasst der Stil?
-Architekturregeln:
Elementregeln: Gelten für einen einzigen Elementtyp, spezifizieren Schnittstellen und Struktur.
Gebotsregeln: Definieren verbindliche Beziehungen zwischen Elementtypen.
Verbotsregeln: Verbieten Beziehungen zwischen bestimmten Elementtypen.
Fazit: Architekturstile begrenzen die möglichen Kombinationen von Elementen innerhalb einer Architektur und definieren dadurch klare Strukturen und Beziehungen.
Erkläre: Strukturelle Architekturstile: Geschichtete Architektur (Layered Architecture)
▪ Layering ist eine der klassischsten Arten, ein System zu strukturieren
▪ Ein System (oder eine Komponente) besteht oft aus verschiedenen Schichten:
- Eine Schicht stellt Dienste für die darüber liegenden Schichten bereit
- Eine Schicht kapselt alle Details ihrer Implementierung
- Eine Schicht darf nur direkt auf die Schnittstelle einer darunter liegenden Schicht zugreifen
(wenn nicht: man hat oft zyklische Abhängigkeiten)
▪ Schichten können (mindestens) zwei Sichtweisen haben:
- Logische Struktur
- Physikalische Topologie (d.h. Einsatzsicht)
▪ Schichten erzwingen die Trennung von Belangen
Was sind Beispiele für mehrschichtige Architekturen:
Grundlegende Schichten
▪ Ein Beispiel für eine Reihe logischer Schichten kann sein…
- Präsentationsschicht: Enthält die Benutzeroberfläche und ist für die Benutzerinteraktionen verantwortlich.
- Business-Schicht: Enthält die Geschäfts-/Anwendungslogik.
- Persistenzschicht: Enthält die für die Speicherung von Daten erforderliche Logik.
- Datenbank-Schicht: Beinhaltet die eigentliche Speicherung der Daten.
▪ Es kommt darauf an, welche Schichten in einer Schichtenarchitektur vorhanden sind:
- Architektonisch wichtige Anforderungen
- Art des Einsatzes
- Verwendete Technologien
Die Abbildung zeigt: Basic Layered Architecture Deployment Variants
Erkläre die Zugriffsarten zwischen Schichten und das Layers of Isolation Konzept
Zugriffsarten zwischen Schichten:
Closed Layers:
Obere Schichten dürfen nicht auf untere Schichten zugreifen.
Schichten können nicht übersprungen werden.
Open Layers:
Obere Schichten können direkt auf darunterliegende Schichten zugreifen.
Layers of Isolation Konzept:
Änderungen in einer Schicht sollten andere Schichten nicht beeinflussen, solange das Interface unverändert bleibt.
Um dies zu unterstützen, müssen Schichten geschlossen sein:
Offene Schichten können zur Kopplung führen, was Änderungen in einer Schicht auf andere auswirken lässt.
Schlussfolgerung: Schichten sollten nicht geöffnet werden.
Erkläre die gemeinsamen Komponenten zwischen Schichten und die Herausforderungen beim Hinzufügen neuer Schichten
Geschlossene Schichten und gemeinsame Komponenten
Gemeinsame Komponenten zwischen Schichten:
Erleichtern die Entwicklung.
Bei geschlossenen Schichten können gemeinsame Komponenten nur durch die direkt darunterliegende Schicht über freigegebene Schnittstellen bereitgestellt werden.
Herausforderungen beim Hinzufügen neuer Schichten:
Neue Schichten entfernen den direkten Zugriff einer oberen Schicht auf untere Schichten.
Um den Zugriff auf gemeinsame Objekte zu erhalten, muss die neue Schicht als offen definiert werden.
Erstellen einer neuen offenen Schicht verstößt gegen das Prinzip der Layers of Isolation.
Nicht-Teilen von Objekten:
Schwer zu steuern (z.B. hat die Präsentationsschicht technisch Zugriff auf gemeinsame Komponenten der Geschäftsschicht).
Erkläre die Geschichtete (layered) Architektur im Domain-Driven Design (DDD)
DDD und geschichtete Architektur:
Präsentationsschicht:
Verantwortlich für Benutzerinteraktion (Anzeige von Informationen und Interpretation von Befehlen).
Applikationsschicht:
Koordiniert Anwendungsaktivitäten (keine Geschäftslogik).
Domänenschicht:
Enthält Informationen über das Geschäftsdomain.
Infrastrukturschicht:
Unterstützt die anderen Schichten (übergreifende Anliegen, Persistenz, etc.).
Muster und Schichten in DDD:
Muster sind direkt mit einer Schicht verbunden.
DDD impliziert keine physische Topologie für die Schichtbereitstellung.
Was sind die Vor-und Nachteile der geschichteten (layered)
Architecture
▪ Vorteile einer mehrschichtigen Architektur:
- Einfach, leicht zu erlernen und zu implementieren
- Entkopplung der Schichten führt zu weniger (leichter zu verstehenden) Abhängigkeiten
- Getrennte Komponenten machen das Testen einfacher
- Geringer Overhead bei der Implementierung (wahrscheinlich der Stil mit den geringsten Kosten)
▪ Nachteile einer schichtweisen Architektur:
- Bietet nur technische Partitionierung
- Wachsen ist schwierig (Schichten helfen nicht bei der Skalierung; mangelnde Agilität)
- Abhängigkeiten zwischen den Schichten bleiben bestehen - keine Umkehrung der Abhängigkeiten
- Gruppierung der Funktionalitäten ist nicht fachlich, sondern technisch orientiert
- Offene Schichten sind manchmal notwendig, haben aber hohe Auswirkungen auf die Wartung
Bitte erkläre: Strukturelle Architekturstile: Ports und Adapter
Die Architektur der Ports und Adapter, auch bekannt als hexagonale Architektur, basiert auf dem Prinzip, dass der Geschäftsbereich zentral für die Struktur des Systems ist. In diesem Design:
Fokus auf Geschäftsbereich: Der Kern des Systems umfasst Entitäten, Geschäftsregeln und Funktionen. Es ist so konzipiert, dass es unabhängig von externen Infrastrukturkomponenten ist, was die Trennung der Zuständigkeiten betont.
Definition von Ports: Der Geschäftsbereich ist mit Schnittstellen ausgestattet, die als Ports bezeichnet werden und die Interaktion mit externen Elementen ermöglichen. Diese Ports sind so gestaltet, dass sie verschiedene Abstraktionsebenen unterstützen, einschließlich allgemeiner Funktionalitäten oder spezifischer Aufgaben wie Persistenz und Benachrichtigungen.
Arten von Ports:
Primäre Ports: Diese verbinden den Geschäftsbereich direkt mit externen Systemen, Benutzeroberflächen oder Arbeitsabläufen und handhaben eingehende Interaktionen.
Sekundäre Ports: Diese werden verwendet, um den Geschäftsbereich mit der notwendigen Infrastruktur zu verbinden und nach außen gerichtete Interaktionen zu verwalten.
Diese Architektur erhöht die Modularität und Flexibilität, ermöglicht Änderungen in der Technologie oder Infrastruktur, ohne die Geschäftslogik zu beeinflussen.
Sieh dir die Abbildung an: Ports and Adapters as Hexagonal Architecture (Ports und Adapter als sechseckige Architektur)
Erkläre Strukturelle Architekturstile: Saubere Architektur (clean architecture)
▪ Die Saubere Architektur kombiniert Ideen
aus mehreren verwandten Ansätzen
- Ports und Adapter
- Onion Architecture (hier nicht diskutiert
aber im Diagramm sichtbar)
- …
▪ Äußere Kreise sind Mechanismen, innere
Kreise sind Richtlinien
▪ Zentral ist die Abhängigkeitsregel: (Quell
code)-Abhängigkeiten können nur nach
nach innen
▪ Entitäten kapseln die allgemeinsten und
(Geschäfts-)Regeln auf hoher Ebene
▪ Anwendungsfälle orchestrieren den Prozess-/Datenfluss
zwischen Entitäten
▪ Schnittstellenadapter konvertieren eingehende Daten in die
Anwendungsfall-Schicht
▪ Frameworks und Treiber bilden die
Infrastruktursicht / erlauben den Zugriff auf innere
Schichten
Entität exkurs:
Im Kontext der Softwareentwicklung und Systemarchitektur bezieht sich der Begriff „Entitäten“ (englisch: entities) auf Objekte oder Datenstrukturen, die geschäftlich oder funktional bedeutsame Informationen repräsentieren. Entitäten sind oft ein zentraler Bestandteil von Geschäftsdomänen und dienen dazu, die Realität innerhalb des Systems zu modellieren. Sie haben spezifische Attribute und Verhaltensweisen, die ihre Rolle und Funktionen im Geschäftsprozess definieren.
Hier sind einige Schlüsselaspekte von Entitäten:
Datenrepräsentation: Entitäten halten Daten, die für das Geschäft wichtig sind. Dies können zum Beispiel Kunden, Aufträge, Produkte oder Konten sein.
Identität: Entitäten haben oft eine eindeutige Identität (z.B. eine Kundennummer oder eine Produkt-ID), die sie von anderen Instanzen desselben Typs unterscheidet.
Geschäftslogik: Entitäten können Geschäftsregeln und -logik enthalten, die definieren, wie sie sich in verschiedenen Situationen verhalten oder wie sie auf bestimmte Aktionen reagieren.
Beziehungen: Entitäten stehen häufig in Beziehungen zueinander, wie etwa Kunde zu Bestellung oder Produkt zu Kategorie.
In der objektorientierten Programmierung werden Entitäten oft als Klassen modelliert, die dann im laufenden System als Instanzen dieser Klassen existieren. In datenbankorientierten Anwendungen können sie als Datensätze in Tabellen abgebildet werden. Entitäten sind also grundlegende Bausteine in der Softwarearchitektur, die dazu beitragen, die Geschäftsanforderungen im technischen Design eines Systems widerzuspiegeln.
Erkläre die Pros and Cons of Ports and Adapters
▪ Vorteile von Ports und Adaptern:
- Implementierung der Business-Domäne völlig unabhängig von technischen Aspekten
(“Infrastruktur”)
- Einfache Wartung durch Trennung von Belangen und Umkehrung von Abhängigkeiten
- Hohe Modularität ermöglicht einfachen Wechsel
- Einfacher Austausch der Infrastruktur möglich (Kern ist technologieunabhängig)
▪ Nachteile von Ports und Adaptern:
- Die strikte Anwendung des Stils erfordert eine saubere und konsistente Implementierung der Geschäftsdomäne (etwas, das oft
fehlt)
- Ports können leicht mit Funktionalitäten aufgebläht werden, was ihre Wartung erschwert (SRP!)
Erkläre Structural Architecture Styles: Pipeline Architecture
Der Pipeline-Architekturstil, auch bekannt als “Pipes und Filters”, charakterisiert sich durch eine strukturierte Kommunikation zwischen Komponenten. In diesem Stil:
Pipes: Sie bilden den Kommunikationskanal zwischen den Filtern, mit unidirektionaler, punkt-zu-punkt Verbindung ohne Broadcasting.
Filter: Jeder Filter führt nur eine spezifische Aufgabe aus und ist selbstständig, zustandslos und unabhängig von anderen Filtern.
Die unterschiedlichen Filtertypen umfassen:
Producer (Erzeuger/Pumpe): Der Startpunkt eines Prozesses, der ausschließlich Daten aussendet.
Transformer (Transformator): Führt Transformationen an den Daten durch.
Tester (Prüfer): Überprüft die Daten nach einem oder mehreren Kriterien und erzeugt optional eine Ausgabe.
Consumer (Verbraucher/Senke): Der Endpunkt der Pipeline, der Daten speichert oder anzeigt.
Die einfache und unidirektionale Kommunikation fördert die Wiederverwendung durch Komposition. Pipeline-basierte Strukturen sind häufig in EDI- oder ETL-Tools zu sehen, die zur Verbindung von Datenquellen verwendet werden, und in Prozess-Orchestratoren wie Workflow-Engines, die Informationen zwischen Prozessschritten übertragen.
Erkläre die Pipeline Structures in MapReduce (MapReduce ist ein konzeptioneller Rahmen für die Verarbeitung riesiger Datenmengen (es gibt viele Implementierungen).)
MapReduce ist ein konzeptioneller Rahmen für die Verarbeitung riesiger Datenmengen (es gibt viele Implementierungen).
▪ Eingabedaten werden aufgeteilt, auf verschiedenen Rechenknoten verarbeitet (d.h. gemappt) und “zusammengeführt” (d.h. reduziert)
▪ MapReduce verwendet eine Pipeline-Struktur auf niedriger Ebene
Erkläre Vor- und Nachteile von Pipeline-Architekturen
▪ Vorteile von Pipeline-Architekturen:
- Sehr einfach zu verstehen und zu implementieren
- Unabhängige Komponenten sind leicht zu ändern und zu testen
- Kann leicht erweitert werden (z. B. durch Hinzufügen neuer Filter)
- Pipeline-Architekturen können sich im Laufe der Zeit weiterentwickeln (einfach zu erweitern und zu ändern)
- Gute Skalierbarkeit bei großen Datenmengen
▪ Nachteile von Pipeline-Architekturen:
- Keine gute Skalierbarkeit hinsichtlich der Systemkomplexität (die Verwendung vieler Filter verringert die Leistung)
- Nur für sehr spezifische Anwendungsfälle geeignet (z. B. weniger geeignet für Benutzerinteraktionen)
- Keine Zusammenarbeit zwischen Filtern (unidirektionales Design ist obligatorisch)
erkläre Structural Architecture Styles: Microkernel
Microkernel-Architekturen bestehen aus zwei Hauptkomponenten:
Anwendungslogik in Plugin-Komponenten: Die Anwendungslogik ist in separaten Plugin-Komponenten gekapselt. Diese Plugins arbeiten unabhängig und greifen nur auf Funktionalitäten zu, die das Kernsystem bereitstellt.
Kernsystem mit Plugin-System: Das Kernsystem bietet ein Plugin-System, das Erweiterbarkeit, Anpassbarkeit und Isolation von Plugins ermöglicht. Es stellt ein Software Development Kit (SDK) zur Verfügung, das ausreichend Erweiterungspunkte („extension points“) für die Funktionsfähigkeit der Plugin-Komponenten bietet.
Verträge: Diese definieren die erwarteten Eingaben, Ausgaben und Verhaltensweisen der Plugin-Komponenten. Es ist üblich, verschiedene Verträge für verschiedene Arten von Plugin-Komponenten zu haben.
Register: Ein Register wird verwendet, um die verfügbaren Plugin-Komponenten zu verwalten und zu identifizieren.
Die Struktur des Kernsystems kann variabel gestaltet werden, und auch die Einsatztopologien des Systems können unterschiedlich sein. Zudem können Plugins unterschiedliche Bindungszeiten aufweisen, was bedeutet, dass sie zu verschiedenen Zeitpunkten während der Laufzeit oder der Kompilierungszeit an das System gebunden werden können.