Arquitectura (IT)Desarrollador PoC/Arquitecto

¿Cuál es la diferencia fundamental entre los patrones Proxy y Facade a nivel arquitectónico, y cuándo aplicarlos?

Supere entrevistas con el asistente de IA Hintsage

Respuesta.

Proxy y Facade son patrones de diseño estructural que resuelven diferentes problemas en la organización de la arquitectura de aplicaciones.

Proxy actúa como un sustituto o "representante" de un objeto. Su tarea es controlar el acceso, almacenar en caché, implementar carga diferida, gestionar la seguridad o distribuir solicitudes (por ejemplo, un proxy de red, un proxy de seguridad). Proxy implementa el mismo contrato (interfaz) que el objeto real.

Ejemplo en 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() { // verificación de acceso realService.operation(); } }

Facade es un patrón que oculta la complejidad de un subsistema, proporcionando una interfaz simplificada y única. Facade no se encarga del control de acceso o lógica adicional, solo agrega llamadas.

Ejemplo en Java:

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

Cuándo aplicar:

  • Proxy: si es necesario controlar el acceso, caché, lógica de seguridad, carga diferida
  • Facade: cuando se necesita simplificar el trabajo del cliente con un conjunto de subsistemas y reducir la dependencia
  • Pueden complementarse entre sí, pero las tareas son diferentes

Características clave:

  • Proxy implementa la interfaz del objetivo, Facade su propia
  • Proxy es transparente para el cliente, Facade es una abstracción adicional
  • Proxy agrega comportamiento, Facade solo simplifica el trabajo

Preguntas con trampa.

¿Está permitido que el patrón Facade agregue funcionalidad más allá de las clases originales del subsistema?

No, Facade solo agrega y simplifica llamadas, la nueva funcionalidad se implementa con otros patrones o en nuevos servicios.

¿Es obligatorio que Proxy se implemente mediante herencia del objeto objetivo?

No, Proxy implementa la interfaz del objetivo, pero a menudo se utiliza la composición (encapsulación del objeto real) en lugar de herencia.

¿Se puede usar Facade para gestionar el acceso o los registros de errores?

Para eso es mejor usar Proxy. Facade no está diseñado para soportar internamente el almacenamiento en caché, el registro o la verificación de derechos.