Saltar al contenido principal

Business Delegate

StructuralDecouplingAlrededor de 3 min

Propósito

El patrón Business Delegate añade una capa de abstracción entre los niveles de presentación y de negocio. Al utilizar
este patrón, conseguimos un acoplamiento flexible entre los niveles y encapsulamos el conocimiento sobre cómo localizar,
conectar e interactuar con los objetos de negocio que componen la aplicación.

También conocido como

Service Representative

Explicación

Ejemplo del mundo real

Una aplicación para teléfonos móviles promete transmitir a tu dispositivo cualquier película existente. Captura la
cadena de búsqueda del usuario y se la pasa al Delegado de Negocio. El Delegado de Negocio selecciona el
servicio de streaming de vídeo más adecuado y reproduce el vídeo.

En pocas palabras

Business Delegate añade una capa de abstracción entre los niveles de presentación y de negocio.

Wikipedia dice

Business Delegate es un patrón de diseño de Java EE. Este patrón está dirigido a reducir el acoplamiento entre los
servicios de negocio y el nivel de presentación conectado, y para ocultar los detalles de implementación de los
servicios (incluyendo la búsqueda y la accesibilidad de la arquitectura EJB). Los delegados de negocio actúan como un
adaptador para invocar objetos de negocio desde la capa de presentación.

Ejemplo programático

En primer lugar, tenemos una abstracción para los servicios de streaming de vídeo VideoStreamingService y un par de
implementaciones NetflixService y YouTubeService.

public interface VideoStreamingService {
    void doProcessing();
}

@Slf4j
public class NetflixService implements VideoStreamingService {
    @Override
    public void doProcessing() {
        LOGGER.info("NetflixService is now processing");
    }
}

@Slf4j
public class YouTubeService implements VideoStreamingService {
    @Override
    public void doProcessing() {
        LOGGER.info("YouTubeService is now processing");
    }
}

A continuación, tenemos un servicio de búsqueda BusinessLookup que decide qué servicio de transmisión de vídeo
utilizar.


@Setter
public class BusinessLookup {

    private NetflixService netflixService;
    private YouTubeService youTubeService;

    public VideoStreamingService getBusinessService(String movie) {
        if (movie.toLowerCase(Locale.ROOT).contains("die hard")) {
            return netflixService;
        } else {
            return youTubeService;
        }
    }
}

El Delegado de Negocio BusinessDelegate utiliza una búsqueda de negocio para dirigir las solicitudes de reproducción
de películas a un servicio de streaming de vídeo adecuado.


@Setter
public class BusinessDelegate {

    private BusinessLookup lookupService;

    public void playbackMovie(String movie) {
        VideoStreamingService videoStreamingService = lookupService.getBusinessService(movie);
        videoStreamingService.doProcessing();
    }
}

El cliente móvil MobileClient utiliza Business Delegate para llamar al nivel de negocio.

public class MobileClient {

    private final BusinessDelegate businessDelegate;

    public MobileClient(BusinessDelegate businessDelegate) {
        this.businessDelegate = businessDelegate;
    }

    public void playbackMovie(String movie) {
        businessDelegate.playbackMovie(movie);
    }
}

Por último, podemos demostrar el ejemplo completo en acción.

  public static void main(String[]args){

        // preparar los objetos
        var businessDelegate=new BusinessDelegate();
        var businessLookup=new BusinessLookup();
        businessLookup.setNetflixService(new NetflixService());
        businessLookup.setYouTubeService(new YouTubeService());
        businessDelegate.setLookupService(businessLookup);

        // crear el cliente y utilizar el Business Delegate
        var client=new MobileClient(businessDelegate);
        client.playbackMovie("Die Hard 2");
        client.playbackMovie("Maradona: The Greatest Ever");
        }

Aquí está la salida de la consola.

21:15:33.790 [main] INFO com.iluwatar.business.delegate.NetflixService - NetflixService is now processing
21:15:33.794 [main] INFO com.iluwatar.business.delegate.YouTubeService - YouTubeService is now processing

Diagrama de clases

Diagrama de clases
Business Delegate

Patrones relacionados

Aplicabilidad

Utilice el patrón Business Delegate cuando

  • Desea un acoplamiento flexible entre los niveles de presentación y de negocio.
  • Quieres orquestar llamadas a múltiples servicios de negocio
  • Se desea encapsular las búsquedas y llamadas a servicios.
  • Es necesario abstraer y encapsular la comunicación entre la capa cliente y los servicios de negocio.

Tutoriales

Usos conocidos

  • Aplicaciones empresariales que utilicen Java EE (Java Platform, Enterprise Edition)
  • Aplicaciones que requieren acceso remoto a servicios empresariales

Consecuencias

Ventajas:

  • Desacoplamiento de los niveles de presentación y de negocio: Permite que el nivel de cliente y los servicios
    empresariales evolucionen de forma independiente.
  • Transparencia de ubicación: Los clientes no se ven afectados por cambios en la ubicación o la instanciación de los
    servicios de negocio.
  • Reutilización y escalabilidad: Los objetos Business Delegate pueden ser reutilizados por múltiples clientes, y el
    patrón soporta el equilibrio de carga y la escalabilidad.
    carga y escalabilidad.

Contrapartidas:

  • Complejidad: Introduce capas y abstracciones adicionales que pueden aumentar la complejidad.
  • Sobrecarga de rendimiento: La indirección adicional puede suponer una ligera penalización en el rendimiento.

Patrones relacionados

  • Localizador de serviciosopen in new window: El Delegado de Negocio (
    Business Delegate) utiliza el Localizador de Servicios (Service Locator) para localizar servicios de negocio.
  • Fachada de Sesiónopen in new window: El Delegado de Negocio (Business
    Delegate) puede utilizar la Fachada de Sesión (Session Facade) para proporcionar una interfaz unificada a un conjunto
    de servicios de negocio.
  • Entidad Compuestaopen in new window: El Delegado (Business Delegate) de
    Negocio puede utilizar Entidad Compuesta (Composite Entity) para gestionar el estado de los servicios de negocio.

Créditos