Files
java-design-patterns/localization/es/business-delegate/README.md
T
Luis Mateo Hincapié Martinez ead6373765 translation: Translated all structural patterns category to Spanish (Task of issue #2277) (#2890)
* Typo corrections

* bridge pattern translated to spanish

* builder pattern translated to spanish

* context-object pattern translated to spanish

* converter pattern translated to spanish

* dependency injection pattern translated to spanish

* factory pattern translated to spanish

* factory-kit pattern translated to spanish

* factory-method pattern translated to spanish

* monostate pattern translated to spanish

* multiton pattern translated to spanish

* object mother pattern translated to spanish

* object pool pattern translated to spanish

* property pattern translated to spanish

* prototype pattern translated to spanish

* registry pattern translated to spanish

* step builder pattern translated to spanish

* value object pattern translated to spanish

* typo corrections and resources urls refactor

* grammar corrections

* Add image to each pattern

* translate all structural patterns to Spanish

---------

Co-authored-by: luismateoh <luismateohm@gmail.com>
Co-authored-by: luis.hincapie <luis.hincapie@blankfactor.com>
2024-04-04 19:54:16 +03:00

203 lines
7.1 KiB
Markdown

---
title: Business Delegate
category: Structural
language: es
tag:
- Decoupling
---
## 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`.
```java
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.
```java
@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.
```java
@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.
```java
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.
```java
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](./etc/business-delegate.urm.png "Business Delegate")
## Patrones relacionados
* [Patrón de localización de servicios](https://java-design-patterns.com/patterns/service-locator/)
## 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
* [Patrón Delegado de Negocio en TutorialsPoint](https://www.tutorialspoint.com/design_pattern/business_delegate_pattern.htm)
## 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 servicios](https://java-design-patterns.com/patterns/service-locator/): El Delegado de Negocio (
Business Delegate) utiliza el Localizador de Servicios (Service Locator) para localizar servicios de negocio.
* [Fachada de Sesión](https://java-design-patterns.com/patterns/session-facade/): 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 Compuesta](https://java-design-patterns.com/patterns/composite-entity/): El Delegado (Business Delegate) de
Negocio puede utilizar Entidad Compuesta (Composite Entity) para gestionar el estado de los servicios de negocio.
## Créditos
* [J2EE Design Patterns](https://www.amazon.com/gp/product/0596004273/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0596004273&linkCode=as2&tag=javadesignpat-20&linkId=48d37c67fb3d845b802fa9b619ad8f31)
* [Core J2EE Patterns: Best Practices and Design Strategies](https://www.amazon.com/gp/product/0130648841/ref=as_li_qf_asin_il_tl?ie=UTF8&tag=javadesignpat-20&creative=9325&linkCode=as2&creativeASIN=0130648841&linkId=a0100de2b28c71ede8db1757fb2b5947)