SysteemarchitectuurPoC-ontwikkelaar/Architect

Wat is het principiële verschil tussen de Proxy- en Facade-patronen op architectuurniveau, en wanneer moet je ze toepassen?

Slaag voor sollicitatiegesprekken met de Hintsage AI-assistent

Antwoord.

Proxy en Facade zijn structurele ontwerppatronen die verschillende taken oplossen bij het organiseren van de architectuur van applicaties.

Proxy fungeert als een surrogaat of "vervanger" van een object. De taak is om toegang te controleren, te cachen, lazy loading te implementeren, beveiliging te regelen of verzoeken te distribueren (bijvoorbeeld netwerktop proxy, beveiligingsproxy). Proxy implementeert hetzelfde contract (interface) als het echte object.

Voorbeeld in Java:

public interface Service { void operation(); } public class RealService implements Service { public void operation() { // ... } } public class ProxyService implements Service { private RealService realService = new RealService(); public void operation() { // toegang controle realService.operation(); } }

Facade is een patroon dat de complexiteit van een subsysteem verbergt door een enkele vereenvoudigde interface te bieden. Facade houdt zich niet bezig met toegangscontrole of aanvullende logica, het aggregeert alleen de oproepen.

Voorbeeld in Java:

public class PaymentFacade { private CardService card; private SmsService sms; public void pay() { card.check(); card.charge(); sms.notify(); } }

Wanneer toe te passen:

  • Proxy — als toegang, caching, beveiligingslogica of lazy loading gecontroleerd moet worden.
  • Facade — wanneer het nodig is om het werk van de klant met een set subsysteem te vereenvoudigen en de koppeling te verlagen.
  • Ze kunnen elkaar aanvullen, maar de taken zijn verschillend.

Belangrijkste kenmerken:

  • Proxy implementeert de interface van het doel, Facade — zijn eigen.
  • Proxy is transparant voor de klant, Facade — een extra abstractie.
  • Proxy voegt gedrag toe, Facade vereenvoudigt alleen het werk.

Vragen met een valstrik.

Is het toegestaan om functionaliteit aan het Facade-patroon toe te voegen bovenop de oorspronkelijke klassen van het subsysteem?

Nee, Facade aggregeert en vereenvoudigt alleen de oproepen, nieuwe functionaliteit wordt gerealiseerd door andere patronen of in nieuwe services.

Moet Proxy verplicht worden geïmplementeerd door middel van overerving van het doelobject?

Nee, Proxy implementeert de interface van het doel, maar vaak wordt compositie (encapsulatie van het echte object) gebruikt in plaats van overerving.

Kan Facade worden gebruikt voor toegangsbeheer of foutlogging?

Daarvoor kun je beter Proxy gebruiken. Facade is niet ontworpen voor ingebouwde ondersteuning voor caching, logging of rechtencontroles.