# Façade (ontwerppatroon)

De façade is een ontwerppatroon in het vakgebied der object-georiënteerd ontwerpen binnen de informatica. De façade dient als voorkant voor een collectie van objecten die samen een verzameling diensten aanbieden.

## Principe van de façade

Binnen de object-georiënteerde analyse en ontwerp is het handig om programma's te ontwerpen die opgebouwd zijn uit losse modules (klassen, componenten en dergelijke), zodanig dat die onderling zo min mogelijk afhankelijkheden vertonen. Dit omdat modules met weinig afhankelijkheden (zogenaamd losjes gekoppelde modules) makkelijker te onderhouden en te vervangen zijn. De programmeur hoeft minder in het achterhoofd te houden.
In sommige gevallen blijkt het echter nodig om systeemonderdelen op te zetten die samen een verzameling van functies aanbieden. Binnen de object-oriëntatie leidt een dergelijke noodzaak heel natuurlijk tot het invoeren van een verzameling componenten die de verschillende functies implementeren. Het directe gevolg hiervan is dat componenten die deze functies willen gebruiken, afhankelijk zullen worden van een groot aantal "functiecomponenten" — met als gevolg sterke koppeling in plaats van losse koppeling.
Het façadepatroon bestaat eruit een verzameling functiecomponenten uit te breiden met een extra component die een "voorkant" of "toegangspoort" wordt tot de functiecomponenten. De façade bestaat uit een aantal methoden, voor iedere functie van de collectie één, die allemaal op zich hun taken delegeren aan een functiecomponent binnen de collectie.

## Voordelen

De façade bewerkstelligt losse koppeling tussen verzamelingen functies (of functiecomponenten) en componenten die van die functies gebruik willen maken. Bijgevolg kent een façade de volgende voordelen:
* Het blijft mogelijk om een collectie functies aan te passen of opnieuw te implementeren als de collectie al door andere componenten gebruikt wordt.
* Het is mogelijk om complexiteit bij het correcte gebruik van een collectie functies te verstoppen in of achter de façade.

## Nadelen

Naast voordelen kent het façadepatroon ook enige nadelen:
* Een façade is van nature een sterk gekoppelde component.
* Een façade reduceert het aantal gebruiksmogelijkheden van een collectie functies van ongebreideld tot "dat wat de façade toestaat". Als gevolg hiervan is het mogelijk dat door het gebruik van de façade niet alle mogelijkheden van een collectie functies aan de buitenwereld aangeboden worden (of kunnen worden).

## Overwegingen

De nadelen van de façade maken dat over het gebruik ervan altijd een afweging plaats moet vinden. Aangezien een façade altijd sterk gekoppeld is en ook nog eens een extra component is in het totale systeem, moet bijvoorbeeld de afweging gemaakt worden of toepassing van de façade de moeite waard is. Een façade voor een klein aantal functiecomponenten plaatsen, kan bijvoorbeeld het systeem onnodig verzwaren. En als blijkt dat een façade het moeilijk maakt om een complexe combinatie van achterliggende functies te gebruiken die wel gewenst is, moet overwogen worden of de façade de moeite is of wellicht ook om het mogelijk te maken voor andere componenten om (gedeeltelijk) om de façade heen te gaan.

## Voorbeelden van gebruik

* Grafische user interfaces
* Bash
* Enterprise JavaBeans
* SOA-architecturen
* Laravel