proyecto

Page 80

Programación Orientada a Aspectos. Una experiencia práctica con AspectJ

80

protected void updateObserver(Subject subject, Observer observer) { java.text.DecimalFormat df = new java.text.DecimalFormat("#,##0.00"); Venta v = (Venta) subject; VentanaTotal vt = (VentanaTotal) observer; vt.actualizarTotal(df.format(v.getTotal().getCantidad())); } }

Las ventajas de implementar el patrón Observer con aspectos con respecto a la implementación clásica con Java son:

Se consigue encapsular el comportamiento cruzado que introduce el patrón Observer en las clases participantes en una única entidad, el subaspecto ObservadorVenta. Por lo tanto, se implementa el patrón sin necesidad de modificar el código fuente de las clases Venta y VentanaTotal, al contrario de lo que sucedía en la implementación con Java. Para añadir o eliminar la instancia del patrón Observer del sistema TPV basta con incluir o no el subaspecto en el proceso de entretejido con las clases de la aplicación. La instancia del patrón es (des)conectable.

4.2.6. Recuperación de fallos en servicios externos (Patrón Proxy) Se desea gestionar el mantenimiento de los servicios externos usados por el sistema TPV ante posibles fallos, en concreto el sistema de contabilidad, que se encarga de registrar las ventas efectuadas en el terminal a través de un servicio externo. Para ello, se dispondrá de un servicio local que será invocado cuando se produzcan fallos en el servicio externo. Este servicio local, se encargará de almacenar las ventas de forma local (en un fichero, en una BD…) para poder reenviarlas al servicio de contabilidad externo cuando vuelva a estar disponible. Una forma elegante de implementar el mantenimiento de servicios externos es mediante el uso del patrón Proxy [21]. El propósito de este patrón es proporcionar un representante o sustituto de un objeto para controlar el acceso a este. Para ello, se introduce un nivel de indirección mediante el objeto proxy, que implementa la misma interfaz que el objeto real que representa, consiguiendo así controlar el acceso a este objeto.

Implementación tradicional en Java Para el ejemplo del sistema TPV, la interfaz que debe implementar el proxy es IAdaptadorContabilidad, y su función será llamar al servicio externo (objeto real)

y en caso de error, invocar al servicio local de contabilidad que almacenará la venta en un fichero mediante serialización. En los siguientes diagramas podemos ver la estructura y el comportamiento del patrón Proxy para el sistema de contabilidad del TPV:


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.