Architekturmuster
# Architekturmuster

Im Bereich der Softwareentwicklung sind Architekturmuster (auch Architekturstil, englisch architectural pattern) in den Arten von Mustern auf oberster Ebene einzuordnen. Im Gegensatz zu Entwurfsmustern oder Idiomen bestimmen sie nicht ein konkretes (meist kleines oder lokales) Teilproblem, sondern die grundlegende Organisation und Interaktion zwischen den Komponenten einer Anwendung.

## Übersicht

Architekturmuster lassen sich in verschiedene Kategorien einteilen:

### Adaptive Systeme

Diese Muster unterstützen besonders die Erweiterungs- und Anpassungsfähigkeit von Softwaresystemen.

* Dependency Injection
* Mikrokernel
* Reflexion

### Chaos zu Struktur (englisch Mud-to-structure)

Diese Muster sollen helfen, die Vielzahl der Komponenten und Objekte eines Softwaresystems zu organisieren. Die Funktionalität des Gesamtsystems wird hierbei in kooperierende Subsysteme aufgeteilt.

**Command Query Responsibility Segregation**


    Trennung des Businessmodells in Teile, die Daten holen (Query), und Teile, die Daten ändern bzw. Fachlichkeiten ausführen (Command)

**Data Context Interaction**


    Trennung von Fachobjekten (Data), Anwendungsfällen, Algorithmen (Context) sowie fachlichen Rollen (Interaction).

**Domain-driven Design und Naked Objects**


    Anwendungsdomänen-getriebene Herangehensweise an Architektur und Design

**Pipes und Filter**


    Schematischer Aufbau des Pipes und Filter Musters Beschreibt die Struktur für Systeme, die Datenströme verarbeiten. Das System wird durch mehrere unabhängige Einheiten strukturiert: Verarbeitungsschritte, sogenannte Filter, mit einer Umwandlung (beispielsweise Ergänzung, Entfernung, Veränderung) von Daten und Verbindungen zwischen den Filtern, sogenannte Pipes, zur effizienten Weiterleitung der Daten.

**Schichtenarchitektur**


    Trennt die Bestandteile eines Softwaresystems in aufeinander aufbauende Schichten

**Schwarzes Brett (Blackboard)**


    Ein Architekturmuster zur Bewältigung von Problemlösungsprozessen. Auf dem Schwarzen Brett werden dabei von einzelnen Teilprozessen Daten in einer hierarchisch organisierten Form abgelegt. Das Schwarze Brett ist nun in der Lage, andere Teilprozesse von der Ablage oder Änderung dieser Daten zu benachrichtigen. Dies ermöglicht eine nahezu parallele Arbeitsweise der Teilprozesse.

### Interaktive Systeme

Muster dieser Kategorie helfen, Mensch-Computer-Interaktionen zu strukturieren.

**Model View Controller (MVC), Model View Presenter und Remote Presentation Model**


    Model View Controller teilen die Benutzerinterface-Interaktionen in drei verschiedene Rollen. Das Modell enthält die darzustellenden Daten und die Geschäftslogik. Es ist von Präsentation und Steuerung unabhängig. Die View ist für die Darstellung der benötigten Daten aus dem Modell und die Entgegennahme von Benutzerinteraktionen zuständig. Sie kennt sowohl ihre Steuerung (Controller) als auch das Modell, dessen Daten sie präsentiert, ist aber nicht für die Weiterverarbeitung der vom Benutzer übergebenen Daten zuständig. Die Steuerung (Controller) nimmt von der View Benutzeraktionen entgegen, wertet diese aus und agiert entsprechend.

**Presentation-Abstraction-Control (PAC)**


    Ein Architekturmuster zur Strukturierung von interaktiven Softwaresystemen. Dabei werden diese derart in Teile zerlegt, dass jeder Teil genau eine Aufgabe des Systems anbietet. Damit wird eine hohe Flexibilität des Systems erhalten und man muss sich nur darum kümmern, dass diese Teile zu einem funktionierenden Ganzen zusammengesetzt werden und auch zusammenarbeiten.

### Verteilte Systeme

Diese Kategorie unterstützt die Verwendung verteilter Ressourcen und Dienste in Netzwerken, wie z. B. die Orchestrierung. Zwei weitere Modelle ('Mikrokernel' und 'Pipes und Filter') unterstützen Verteilung zweitrangig.

**Client-Server**


    Beschreibt eine weitere Möglichkeit, Aufgaben und Dienstleistungen innerhalb eines Netzwerkes zu verteilen. Die Aufgaben werden von Programmen erledigt, die in Clients und Server unterteilt werden. Der Client kann auf Wunsch eine Aufgabe vom Server anfordern, der Server beantwortet die Anforderung.

**Peer-to-Peer**


    Bezeichnet eine Möglichkeit, Aufgaben und Dienstleistungen innerhalb eines Netzwerkes zu verteilen. Dabei sind alle Computer gleichberechtigt und können sowohl Dienste in Anspruch nehmen als auch zur Verfügung stellen. Ebenso können die Netzwerkteilnehmer abhängig von ihrer Qualifikation in verschiedene Gruppen eingeteilt werden und spezifische Aufgaben übernehmen.

**Serviceorientierte Architektur (SOA)**


    Ein Architekturmuster für verteilte Systeme, um Dienste von IT-Systemen zu strukturieren und zu nutzen. Durch Zusammensetzen (Orchestrierung) werden damit Geschäftsprozesse durch Dienstimplementierungen abgebildet. Durch Orchestrierung von Diensten niedriger Abstraktionsebenen können so recht flexibel und unter Ermöglichung größtmöglicher Wiederverwendbarkeit Dienste höherer Abstraktionsebenen geschaffen werden.

**Edge Computing**


    Dezentrale Datenverarbeitung am Rand des Netzwerks, der sogenannten Edge. Damit wird die immer größer werdende Rechenleistung der Endgeräte wie Mobiltelefone dazu genutzt, Berechnungen beim Anwender zu machen, um damit Bandbreite zu sparen und die Reaktionszeit zu reduzieren.
