Soy un gran admirador de los motores de reglas comerciales, ya que pueden ayudarte a hacer tu vida mucho más fácil como programador. Una de las primeras experiencias que tuve mientras trabajaba en un proyecto de almacén de datos fue encontrar procedimientos almacenados que contienen estructuras CASE complicadas que se extienden por páginas enteras. Fue una pesadilla depurar, ya que era muy difícil entender la lógica aplicada en estructuras CASE tan largas y determinar si hay una superposición entre una regla en la página 1 del código y otra de la página 5. En general, tuvimos más de 300 de estas reglas integradas en el código.
Cuando recibimos un nuevo requisito de desarrollo, para algo llamado Destino de contabilidad, que implicaba tratar más de 3000 reglas, supe que algo tenía que cambiar. En aquel entonces estuve trabajando en un prototipo que luego se convirtió en el padre de lo que ahora es un motor de reglas comerciales personalizadas, capaz de manejar todos los operadores estándar SQL. Inicialmente usamos Excel como herramienta de autoría y, posteriormente, creamos una aplicación ASP.net que permitirá a los Usuarios Comerciales definir sus propias reglas comerciales, sin necesidad de escribir código. Ahora el sistema funciona bien, con muy pocos errores y contiene más de 7000 reglas para calcular este destino contable. No creo que tal escenario hubiera sido posible con solo codificarlo.
Aún así, existen límites para tal enfoque:
- Necesita tener usuarios empresariales capaces que tengan un excelente conocimiento del negocio de la empresa.
- Existe una carga de trabajo significativa en la búsqueda de todo el sistema (en nuestro caso, un almacén de datos), con el fin de determinar todas las condiciones codificadas que tienen sentido para traducirse en reglas para ser manejadas por un motor de reglas de negocios. También hemos tenido que cuidar que estas plantillas iniciales sean completamente comprensibles para los usuarios comerciales.
- Debe tener una aplicación utilizada para la creación de reglas, en la que se implementen algoritmos para la detección de reglas comerciales superpuestas. De lo contrario, terminará con un gran lío, donde ya nadie entenderá los resultados que obtienen. Cuando tiene un error en un componente genérico como un motor de reglas de negocio personalizado, puede ser muy difícil depurarlo e involucrar pruebas exhaustivas para asegurarse de que las cosas que funcionaban antes también funcionan ahora.
Se pueden encontrar más detalles sobre este tema en una publicación que escribí: http://dwhbp.com/post/2011/10/30/Implementing-a-Business-Rule-Engine.aspx
En general, la mayor ventaja de utilizar un motor de reglas de negocio es que permite a los usuarios recuperar el control sobre las definiciones y la creación de las reglas de negocio, sin la necesidad de acudir al departamento de TI cada vez que necesitan modificar algo. También reduce la carga de trabajo de los equipos de desarrollo de TI, que ahora pueden centrarse en crear cosas con más valor añadido.
Salud,
Nicolae