Diseño de la Capa de Negocio

Anuncio
Diseño de la Capa de
Negocio
Aplicaciones Distribuidas
Motivación
•  Motivación:
•  Implantar un modelo UML (diagramas de clases y
colaboraciones) de una aplicación empresarial.
•  Solución:è Enterprise JavaBeans
•  Implantar los objetos de negocio con distintas posibilidades
de persistencia.
•  Implantar la lógica de negocio (controladores cdu) como
objetos distribuidos y transaccionales.
•  Eficiencia en la gestión de recursos.
•  Seguridad.
•  ...
•  è Modelo de programación complejo
2
Guías básicas de diseño
•  Implantar los objetos de negocio y sus relaciones como
componentes Entidad:
•  Persistencia:
•  BMP: manejar almacenamiento XML, LDAP, ...
•  CMP 1.x: integración con otro sistema de información.
•  CMP 2.x: propósito general.
•  En general, definir interfaces locales.
•  Sólo accesibles para los controladores de cdu.
•  Utilizar un modelo transaccional “required”:
•  Integración con la operación transaccional del cdu.
•  Implantar los controladores de cdu como componentes Sesión:
•  Decidir entre un controlador con estado (stateful) o sin estado
(stateless).
•  Modelo transaccional “required”.
3
Ejemplo de Colaboración
Capa
Presentación
Cliente
Sesión
Stateful
Entidades
pedidos :
ControladorPedidos
pedidoActual :
Pedido
l1 :
LineaPedido
p1 : Producto
totalAPagar( )
getTotal( )
getSubt otal( )
precio( )
getSubt otal( )
4
l2 :
LineaPedido
Patrones – Factoría de
Homes
•  Problema:
•  Necesidad de uso objetos Home: crear una Pedido, conectar una
Línea de Pedido con un Producto, ...
•  Acceso local o remoto al objeto Home a través de JNDI:
!Context ctxInicio = new InitialContext();!
!
!// Obtiene una referencia local al Home!
!Object obj = entorno.resolve(“Producto");!
!ProductoLocalHome productoHome = (ProductoLocalHome) obj;!
•  Solución:
•  Utilizar una factoría (singleton) de objetos Home que mantenga una
caché de referencias: EJBHomeFactory
ProductoLocalHome productoHome =
!!
!(ProductoLocalHome) EJBHomeFactory.getInstance().getHome(“Producto”)!
!
5
Patrones – Value Object
•  Motivación:
•  Necesitamos la información de un objeto de negocio.
•  Alternativa 1:
•  Devolver una referencia remota al objeto
Cliente
pedidos :
GestorPedidos
getInfoProducto( )
•  Inconvenientes:
•  Múltiples invocaciones remotas.
getNombre( )
getPrecio( )
...
6
Acceso remoto
RMI/IIOP
: Producto
Patrones – Value Object
•  Alternativa 2:
•  Construir un objeto de datos (Value Object) que sea devuelto por
valor (serializable).
•  Ventajas:
•  Una sola invocación remota para obtener los datos.
Cliente
producto:
ProductoVO
pedidos :
GestorPedidos
: Producto
producto :
Product oVO
getInfoProducto(id)
getVO( )
return producto
getNombre( )
getPrecio( )
...
Capa de Presentación
Servidor EJB
7
new( )
Patrones – Value Object
• 
Consecuencias:
•  Introducir los métodos getVO y setVO (actualizaciones) en todos los objetos de negocio.
• 
Problemas:
•  Distintos cdu pueden necesitar una pequeña parte de la información de un objeto de
negocio.
•  Necesitamos información de varios objetos de negocio (submodelo):
• 
Ejemplo: información de un pedido
• 
Objeto pedido, sus líneas de pedido y de los productos.
•  à Custom Value Object
• 
è El controlador se encarga de componer el objeto:
•  Un VO puede estar compuesto de otros VOs.
•  Ejemplo: PedidoVO contiene una colección de LineaPedidoVO
8
Patrones – Custom Value Object
Cliente
pedidos :
GestorPedidos
infoPedido( )
pedidoVO :
PedidoVO
miPedido :
Pedido
new( )
getTotal( )
setTotal( )
getLineasVenta( )
getProducto( )
new( )
getNombre( )
precio( )
setNombreProducto( )
setPrecioProducto( )
getSubTotal( )
setSubTotal( )
Compone la colección de
Líneas de Pedido VO
setLineasPedidoVO( )
return pedidoVO
9
lp1 :
LineaPedido
lp1VO :
p1 : Producto
LineaPedidoVO
Patrones – Iterador
•  Motivación:
•  Devolver una colección de objetos de negocio de un
modo eficiente.
•  Solución:
•  Implementar un iterador distribuido.
•  Obtendrá una colección de objetos de negocio sobre los
que iterar.
•  Irá devolviendo sus VO asociados según vayan siendo
necesarios.
•  Implementado como un objeto de tipo sesión.
10
Patrones – Iterador
Session
Stateful
Cliente
pedidos :
GestorPedidos
it :
IteradorR em oto
:
ProductoHome
p1 : Producto
getProductos( )
col = findAll( )
new(col)
ret urn it
"create" del
Home
next(n)
getVO( )
getVO( )
return colVO
Compone la colección de los
siguientes "n" VO
previous(n)
11
p2 : Producto
Patrones – Business
Delegate
•  Motivación:
•  El modelo puede estar implementado con diferentes
tecnologías: DAO, RMI, CORBA, EJB
•  Independizar Presentación del Modelo.
•  Solución:
è Patrón Bussiness Delegate
•  Interface Java con las operaciones cdu
•  GestorPedidosDelegate
•  Implementado por una clase que hace de proxy (delegate)
•  Obtiene el controlador del modelo.
•  Delega todas sus operaciones en él.
•  Factoría de Delegates.
12
Patrones – Service Locator
•  Problema:
•  Los delegados se crean continuamente: por sesión y cdu.
•  Un delegado obtiene el controlador EJB a través de JNDI y de su
interface home
•  El acceso JNDI es costoso.
•  Solución:
è Patrón Service Locator
•  Proporciona referencias a los objetos Home de los controladores.
•  Se encarga de los detalles de acceso (propiedades JNDI)
•  Mantiene una caché de referencias.
•  è Similar a la factoría de homes, pero en la capa de presentación.
•  Propósito general: objetos distribuidos, EJB, colas JMS, ...
13
Descargar