Apartado 5.6.3: Session Facade

Anuncio
5.6.3 Session Facade
Session Facade (1)
„
Intención
„
„
Proporcionar una interfaz sencilla que soporta un conjunto
de casos de uso relacionados
Motivación
„
„
„
La explicada en el tema 2: proporcionar una interfaz sencilla
que soporta un conjunto de casos de uso relacionados (en
general, una operación por cada caso de uso), ocultando las
relaciones existentes en la implementación de cada caso de
uso
Adicionalmente, cuando se usa EJB, se pretende reducir el
número de invocaciones remotas y evitar que el cliente
tenga que usar el API de transacciones
Ej.: MiniBank
Session Facade (2)
„
Motivación (cont)
„
Opción 1
„
Definir los interfaces de los Entity Beans como remotos, prescindir del
Session Bean e implementar la fachada en el Business Delegate
:EJBAccountFacadeDelegate
:AccountHome
src:Account
findByPrimaryKey(srcId)
transfer(srcId,
destId, amount)
findByPrimaryKey(destId)
getBalance()
withdraw(amount)
add(amount)
MVJ-1
Red
MVJ-2
NOTA: Por cuestiones de espacio, el diagrama no ilustra
la creación de las dos operaciones bancarias
dest:Account
Session Facade (3)
„
Motivación (cont)
„
Opción 1 (cont)
„
„
„
„
La operación transfer involucra 7 operaciones remotas (las 5
mostradas más las dos correspondientes a
AccountOperationHome.create)
La implementación de transfer necesita usar el API de
transacciones (javax.transaction)
Lógica de negocio en el cliente => no se beneficia de las
ventajas de una arquitectura en 3 capas
Opción 2
„
„
Definir los interfaces de los Entity Beans como locales e
implementar la fachada como un Session Bean remoto
El Business Delegate es un Proxy de la fachada
Session Facade (4)
„
Motivación (cont)
„
Opción 2 (cont)
:EJBAccountFacadeDelegate
transfer(srcId,
destId, amount)
:AccountLocalHome
src:AccountLocal
:AccountFacadeEJB
findByPrimaryKey(srcId)
transfer(srcId,
destId, amount)
findByPrimaryKey(destId)
getBalance()
withdraw(amount)
add(amount)
MVJ-1
dest:AccountLocal
Red
MVJ-2
NOTA: Por cuestiones de espacio, el diagrama no ilustra
la creación de las dos operaciones bancarias
Session Facade (5)
„
Motivación (cont)
„
Opción 2 (cont)
„
„
„
„
„
La operación transfer involucra 1 operación remota
El contenedor de EJBs gestiona la transacción automáticamente
Lógica de negocio en contenedor de EJBs
Las anteriores desventajas (opción 1) y ventajas (opción 2) no
son sólo para transfer, sino para todas las operaciones
Aplicabilidad
„
„
Cuando se quiere ofrecer una versión simplificada de un
conjunto de EJBs
Cuando se quiere reducir el número de invocaciones
remotas desde la capa cliente
Session Facade (6)
Estructura
„
<<SessionBean>> <<use>>
BusinessObject
SessionFacade
Client
<<EntityBean>>
BusinessEntity
<<use>>
<<SessionBean>>
BusinessSession
<<use>>
DataAccessObject
„
Participantes
„
Client (EJBAccountFacadeDelegate)
„
Puede ser un Business Delegate u otro Session Facade
SessionFacade (AccountFacadeEJB)
„
„
„
Normalmente, un Session Bean
Proporciona un interfaz sencillo al cliente, ocultando las
relaciones entre numerosos objetos de negocio
Session Facade (7)
„
Participantes (cont)
„
Business Object (Account y AccountOperation)
„
„
Colaboraciones
„
„
Proporciona datos (Entity Bean o DAO) o un servicio (Session
Bean)
Un SessionFacade coordina a un conjunto de objetos de
negocio para implementar un conjunto de casos de uso
relacionados
Consecuencias
„
Beneficios
„
„
„
Simplifica el mantenimiento
Reduce el número de invocaciones remotas
Simplifica la gestión de transacciones
Session Facade (8)
„
Implementación
„
Un Session Facade se implementa como un SLSB o SFSB en
función de si necesita guardar estado o no
„
„
„
„
Ej.: AccountFacade (SLSB) en MiniBank
Ej.: UserFacade (SFSB) en MiniPortal
En el caso de una aplicación web y disponer de un contenedor
completo de J2EE => Session Facades (Session Beans) con
interfaces locales
Evitar que el Session Facade termine siendo una clase grande
„
„
„
La descripción de este patrón en el sitio web de IBM, recomienda
implementar las operaciones que requieren más de 4 ó 5 líneas de
código (sin contar la gestión de excepciones), en clases acción
Designing Enterprise Applications with the J2EE ilustra una versión
potente (quizás demasiado compleja) de la aplicación del patrón
Command, que minimiza el número de operaciones del Session Facade
EJB Design Patterns ilustra una versión muy simplificada (quizás no
útil) de la aplicación del patrón Command (patrón EJB Command)
Session Facade (y 9)
„
Implementación (cont)
„
„
„
para referirse a un Session Facade con operaciones que
devuelven Custom Value Objects
EJB Design Patterns llama Data Transfer Object Factory a
una variante del patrón Value Object Assembler que además
incluye operaciones de actualización
Código de ejemplo
„
„
„
Core J2EE Patterns habla del patrón Value Object Assembler
AccountFacade (SLSB) en MiniBank
UserFacade (SFSB) en MiniPortal
Patrones relacionados
„
„
„
„
Facade
Data Access Object
Service Locator
Business Delegate
Descargar