MessEngine: Desacoplando Componentes like a Boss...

El MessEngine es un framework de mensajería asíncrona para aplicaciones java no distribuidas. El objetivo principal del framework es facilitar el diseño y desarrollo de los componentes de una aplicación mediante una clara separación en las capas y en las responsabilidades de los componentes. El messengine busca también mejorar los tiempos de respuesta en aquellas aplicaciones que requieran la ejecución de una gran cantidad de tareas concurrentemente.

El tipo de comunicación que este framework ofrece favorece el diseño de componentes débilmente acoplados y altamente cohesivos, promoviendo a su vez el principio de responsabilidad única en las clases y la reutilización del código.

El messengine permite también una fácil separación en capas de las aplicaciones que poseen una interfaz gráfica de usuario compleja, ya que implementa internamente el patrón MVC y provee los elementos necesarios para que las diferentes capas puedan interactuar sin necesidad de conocer los componentes de otras capas.

El framework define tres interfaces básicas: ViewEngine, ControlEngine y MessEngine.

ViewEngine es la interface que define la comunicación de la capa de Vista hacia la capa de Control y el Modelo. La premisa en que se basa esta interface es que un componente de vista únicamente debe modificar su estado como respuesta a un evento, y, por otra parte un componente de vista puede disparar acciones y consultar atributos del modelo. Dichos eventos, acciones y atributos del modelo son interfaces que tienen un identificador y un tipo, facilitando el desarrollo y la legibilidad del código.

ControlEngine es la interface que define la comunicación de la capa de Control hacia la Capa de Vista y el Modelo. La premisa en que se basa esta interface es que un componente de Control maneja las acciones definidas y tiene la capacidad de disparar eventos para actualizar el estado de la capa de Vista. Un componente de control puede además actualizar los valores de los atributos del modelo. Por último, un componente de control no puede pedir información a la capa de vista por lo que toda la información requerida debe estar contenida en el objeto que encapsula dicha acción o disponible en el Modelo.

MessEngine es la interface que define la comunicación entre los componentes que no forman parte de la capa de Control ni de Vista. Podemos pensar en esta interface como aquella que permite comunicar diferentes servicios. Por esta razón, esta interface es mucho más simple en comparación con las anteriores, sin embargo, sus aplicacaciones son más amplias y por lo mismo puede resultar la más complicada de aprender a usar en un principio. El MessEngine permite a los componentes enviar mensajes y escuchar mensajes asíncronamente. Un mensaje tiene un tipo (un String que sirve como id), un cuerpo, y puede además contener propiedades. Las ventajas que ofrece una comunicación de este tipo pueden ser varias dependiendo el contexto y el problema que se busque resolver. Un buen ejemplo es el desacoplamiento del servicio de red de una aplicación. Supongamos que en una aplicación existen varios servicios que requieren hacer peticiones a través de la red; una posible solución sería agregar la dependencia del servicio de red a cada servicio que lo necesite, sin embargo, esto limitaría nuestra capacidad de cambiar la definición y la implementación del servicio de red puesto que sería de gran impacto para el resto de los servicios. Utilizando el MessEngine para resolver este problema, las peticiones se encapsulan en un mensaje, y el servicio de red se suscribe a todas estas peticiones permitiéndonos cambiar la implementación de dicho servicio en el momento que deseemos sin necesidad de cambiar el resto de los servicios. Más aún, los servicios pueden desarrollarse simultáneamente por diferentes personas y agilizar el desarrollo de la aplicación.

El framework ofrece actualmente soporte para anotaciones y métodos de conveniencia que facilitan mucho su utilización e incrementan la legibilidad del código . La configuración e inicialización del mismo puede realizarse programáticamente o utilizando Spring.

El messengine es un excelente framework para desarrollar aplicaciones stand-alone con interfaces gráficas avanzadas ya que su modelo de comunicación simplifica el desarrollo y garantiza un estilo homogéneo a lo largo de toda la aplicación facilitando la mantenibilidad de la misma.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

Entre apps?

Este framework permite manejar mensajes entre distintas aplicaciones? Si es así, cómo se compara contra soluciones como Akka, Thrift y protobuf, o es algo completamente distinto?

Es distinto

La libreria es para comunicar componentes a traves de mensajes en vez de usar interfaces o inyectarte todas las dependencias.
La razon de usar esto es para evitar tener demasiadas dependencias en una clase y que no todas se esten usando, de igual forma cuando no te importa realmente el resultado de una invocacion en uno de tus colaboradores (metodos void) o cuando la respuesta no importa que sea sincrona.
El ejemplo mas claro es haciendo aplicaciones de escritorio, digamos que haces un feed reader tu mandas a traer los feeds nuevos de un blog, eso quieres que sea asincrono y la respuesta la manejas por medio de un evento entonces tu vista manda una accion y reacciona a eventos para mostrar el resultado.
El messengine se encarga de hacer que todo sea asincrono y bonito.
lo padre es que se puede cambiar quien va a manejar ese mensaje o accion sin alterar a nadie, asi que si un dia decides que vas a cambiar tu http rest por un xml web rpc pues nada mas tienes que cambiar la capa de transferencia, no agregas mas interfaces ni tu aplicacion tiene que saber que ese cambio ocurrio ella sigue manejando mensajes, eventos y acciones.
Es mas padre cuando lo vez en uso.
El codigo esta en
hay un ejemplito en la wiki, esperamos ponerlo mas completo y al dia.