ceros y unos

Recientemente, un lector del blog me preguntó mi opinión sobre como usar los motores de reglas (BRMS) en SOA. Como sabemos, las reglas son junto a los procesos y los servicios los tres elementos que podemos combinar en un sistema SOA con la suficiente complejidad.

Básicamente una lógica de negocio basada en reglas consiste en un programa al que invocamos con unos parámetros de entrada y nos devuelve unos parámetros de salida. Por motivos de rendimiento, no se aconseja que estas reglas accedan por ejemplo a la base de datos. Es decir, estamos ante una caja cerrada cuyo único contacto con el mundo exterior son los parámetros de entrada/salida que se intercambia con el cliente que lo invoca. Esto se parece bastante a un servicio ¿no?

Entonces, ¿dónde podemos poner las lógicas basadas en reglas de negocio en nuestro sistema SOA?

motor de reglas en soa

Si tenemos en mente una disposición clásica con, de izquierda a derecha, capa de frontal, capa de integración y backend como la que podemos ver en el gráfico, realmente podríamos colocar un motor de reglas en cualquiera de las tres (aunque con matices).

Reglas en la capa de frontal

La capa de frontal no debe tener lógica de negocio, así que un motor de reglas no tendría mucho sentido en principio. Sin embargo, las reglas también puede ser usadas para ejecutar cierta lógica de presentación, de navegación entre pantallas, para decidir que tipo de formulario hay que mostrarle al cliente…

Un posible uso de las reglas de frontal en este sentido podría ser por ejemplo, el de un cuestionario sobre salud. Dependiendo de las respuestas que el cliente vaya dando, las reglas nos dirán cuales son las siguientes preguntas que hay que realizar. Como vemos, no son reglas de negocio estrictamente hablando pero sí puede ser un uso interesante en la capa de frontal.

 Reglas en la capa de integración

En la capa de integración, radican los servicios compuestos, que integran varios backends o aplicaciones de “core”. También estarían aquí los procesos de negocio (BPM) de la empresa.

En esta capa, yo distinguiría dos tipos de reglas:
  • las que se aplican al proceso (son reglas de enrutado) para ver por qué camino sigo… por ejemplo: “si el importe es mayor 10000 entonces voy por el camino B”…
  • otro caso serían lo que podríamos llamar reglas de negocio que definen lógica de negocio… por ejemplo, un paquete de reglas que te calcula el precio de un seguro o te dice si conceder o no un préstamo a un cliente…
En el primer caso, yo pondría las reglas en el bus o en el motor de procesos BPM. Esto hay que entenderlo como un uso un poco “light” del motor de reglas, incluso hay motores de procesos que incorporan su propio pequeño motor para esto precisamente.

Reglas en la capa de Backend

Ahora bien, en el segundo caso, en el caso de que en el motor de reglas se defina la lógica de negocio, yo lo consideraría como un servicio más… es decir, un servicio de núcleo o de backend. Lo mismo que si el servicio estuviese implementado en Java.
En definitiva, lo que trato de decir es que encapsularía las reglas de negocio como un servicio SOAP o REST. El cliente de este servicio ni siquiera sabría que está llamando a un motor de reglas…