Patrón Proxy Virtual

En el post anterior discutimos cómo implementar un Proxy Remoto utilizando JAVA RMI para acceder a los objetos que están en otra maquina virtual. El patrón Proxy también puede implementarse de manera virtual (Patrón Proxy Virtual), es decir, dentro de la misma aplicación, vamos a utilizar un objeto que va a sustituir al elemento que realmente deseamos acceder.

Este patrón se utiliza cuando el objeto que necesitamos utilizar es muy costoso de crear, ya sea a nivel de memoria o en tiempo.

Por ejemplo, si al iniciar nuestra aplicación tenemos varias tablas con información, gráficos, videos, etc. Vamos a necesitar un proxy virtual ya que no debemos de detener toda la aplicación hasta que cargue todo el contenido “pesado”.

La idea es que nuestras aplicaciones sean lo más eficiente posibles. Al utilizar este patrón, nos aseguramos que nuestra aplicación sea completamente funcional aún cuando hace falta cierto contenido.

Diagrama del ejemplo de aplicación

Por ejemplo, el gráfico anterior muestra que los usuarios pueden acceder al sitio Web que contiene información que va a tardar un poco en cargarse por completo, como imágenes, videos, etc. Sin embargo, esto no va a evitar que el usuario pueda navegar libremente en el sitio.

El siguiente gráfico nos muestra el diseño general de un proxy virtual.

Diseño de un proxy virtual

El cliente realiza una solicitud al proxy, recordemos que en realidad el cliente no tiene conocimiento de que existe un proxy. El proxy, recibe la solicitud, crea la instancia del objeto real (RealSubject) y para evitar esperar a que se termine de crear, devuelve un resultado general o con datos temporales.

Por ejemplo, en los gráficos o imágenes, podemos ver que muestran una imagen por defecto o un mensaje que nos indica que la información se está cargando.

Una vez que el objeto real esta disponible, si el cliente realiza otra solicitud, el proxy simplemente la redirecciona al objeto real, es decir, el proxy funciona como un puente o un intermediario entre el cliente y el objeto real.

Nuestra aplicación de ejemplo es muy sencilla. Vamos a simular una consulta a una base de datos, y mientras esperamos el resultado, el cliente va a recibir un mensaje por defecto. Una vez que el resultado es cargado desde la base de datos, desplegamos la información real.

Este sería el resultado de ejecutar nuestro código de ejemplo.

Resultado de ejecutar el código de ejemplo

La imagen anterior muestra como simulamos una consulta que tarda 5 segundos en retornar el resultado real. Para el cliente, cada vez que realiza la consulta, se le muestra un mensaje por defecto, que evita que la aplicación se detenga hasta tener el resultado.

El código de ejemplo lo pueden descargar aquí.

En el próximo post vamos a discutir el Patrón llamado Proxy Protegido.

Recordá suscribirte aquí para recibir las últimas actualizaciones todas las semanas.

Leave a Reply

Your email address will not be published. Required fields are marked *