Pipes und Filter
# Pipes und Filter

Pipes und Filter (engl. pipes-and-filters, auch Datenfluss-System) ist ein Architekturmuster aus dem Bereich der Softwareentwicklung. Es beschreibt die Struktur für Systeme, die Datenströme verarbeiten.

## Aufbau

Das Bild stellt schematisch ein System dar, das auf dem Muster Pipes und Filter basiert. Das System wird durch mehrere unabhängige Einheiten strukturiert:

### Filter

    Ein Filter ist ein Verarbeitungsschritt. Jeder Filter hat eine Dateneingabe und eine Datenausgabe. In jedem Verarbeitungsschritt werden die einkommenden Daten umgewandelt. Bei der Umwandlung können den Daten Teile entnommen, hinzugefügt oder auch vollständig ersetzt werden. Die Art der Umwandlung wird durch den Filter bestimmt.

### Pipes

    Eine Pipe stellt eine Verbindung zwischen den einzelnen Verarbeitungsschritten dar. Der Name lässt sich durch den englischen Begriff für Rohrleitungen (pipes) herleiten.
Im dargestellten Bild ist ein System schematisch dargestellt, bei dem die Daten links ankommen (Dateneingabe) und in mehreren Schritten verarbeitet werden. Das Ergebnis des Gesamtsystems wird rechts wieder ausgegeben (Datenausgabe). Der Ausgang eines Verarbeitungsschrittes ist gleichzeitig der Eingang des nachfolgenden Verarbeitungsschrittes. Das Ergebnis des Systems ist somit abhängig von der Eingabe; der Abhängigkeitsgraph ist linear.
Die Verarbeitungsschritte können immer wieder neu angeordnet werden. Stehen beispielsweise drei verschiedene Filter zur Verfügung, so können (unter der Annahme, dass ein Filter maximal einmal verwendet wird) daraus 15 verschiedene Systeme gebildet werden:
* 3-Schrittsysteme: (1,2,3) (1,3,2) (2,1,3) (2,3,1) (3,1,2) (3,2,1)
* 2-Schrittsysteme: (1,2) (1,3) (2,1) (2,3) (3,1) (3,2)
* 1-Schrittsysteme: (1) (2) (3)
Diese 15 Systeme können auch als eine „Familie“ verwandter Systeme bezeichnet werden.
Durch diese Architektur ergeben sich einige Vorteile:
* Systemerweiterungen sind durch Austausch oder Erneuerung von Filtern möglich.
* Wird ein Filter als Komponente eines Systems betrachtet, so ist das System leichter an unterschiedliche Kontexte anzupassen, als wenn das System aus einer einzigen großen Komponente bestünde.

## Varianten

Eine Variante des Pipes-und-Filter-Musters ist das Tee-and-join-Pipeline-System. Hier einige Unterschiede:
* Es sind mehrere Ein- und Ausgabekanäle pro Filter erlaubt. Dadurch können auch verschiedene unabhängige Datenströme in Abhängigkeit zueinander verarbeitet werden.
* T-Filter oder auch T-Pipes ermöglichen das Aufteilen eines Datenstroms, oder umgekehrt das Zusammenführen zweier Datenströme. Die zwei Datenströme können daraufhin in unterschiedlicher Weise parallel weiterverarbeitet werden.
* Datenschleifen sind erlaubt: Die Ausgabe eines Filters kann wieder zurückgeführt werden als Eingabe einer vorhergehenden Filtereinheit. Informationen, die in den Eingabedaten enthalten sind, können somit erneut verarbeitet werden. Dadurch ist es insbesondere möglich, nichtlineare Systeme zu bilden.