Was ist eine Facade?
Eine Fassade (Facade) ist eine einfache Schnittstelle, hinter der sich ein komplexes Subsystem verbirgt. Wir können und das wie die Fassade eines Gebäudes vorstellen: dahinter "verbergen" sich Räume, Elektroinstallation, Klimatechnik, Wasserleitungen und so weiter.
Die Fassade ist eines der Entwurfsmuster, das bereits im wegweisenden Gang of Four-Buch beschrieben wurde:
A high-level interface that makes a subsystem easier to use.
— Gamma, Helm, Johnson, Vlissides: "Design Patterns: Elements of Reusable Object-Oriented Software", Addison-Wesley, 1994
Wir kennen Facade aus dem Programmieralltag. Ein Front Controller beispielsweise ist die Fassade für ein HTTP-Framework. Wir müssen uns nicht mit Details des Frameworks wie Request-Objekten oder Routing auseinandersetzen, sondern rufen einfach eine einfache Methode wie Framework::run()
auf, die sich dann um die gesamte Verarbeitung kümmert.
Ein Repository ist eine Fassade, die das Persistenz-Subsystem vor unseren neugierigen Blicken verbirgt und einfach zu benutzen macht: Wir rufen einfach eine Methode wie findById()
auf und müssen uns um nichts weiter kümmern.
Wer mit Aggregates arbeitet: ein Aggregate Root ist ebenfalls eine Fassade.
Eine Fassade ist also eine Abstraktion, weil sie Details verbirgt und damit das Geheimnisprinzip der OOP umsetzt: Um eine Software-Komponente zu benutzen, müssen wir nur deren Schnittstelle verstehen und nicht deren Implementierung.