En Give Your Business Logic a Framework with Drools se encuentra un buen ejemplo:
if ((user.isMemberOf(AdministratorGroup) && user.isMemberOf(teleworkerGroup)) ||
user.isSuperUser() {
// more checks for specific cases
if ((expenseRequest.code().equals("B203") ||
(expenseRequest.code().equals("A903") && (totalExpenses < 200) &&
(bossSignOff > totalExpenses)) && (deptBudget.notExceeded)) {
// issue payments
}
else if {
// check lots of other conditions
}
}
else {
// even more business logic
}
}
Este extracto de código muestra que las reglas son difíciles de programar y mantener en Java. Un problema potencial puede ser la frecuencia de cambio de las reglas, para este ejemplo, que los roles y los códigos cambien frecuentemente. Para aplicar un cambio de esta clase implica por lo menos modificar el código, compilar e instalar la aplicación, pudiendo llevar horas o días. Una forma de evitar este proceso es tener separadas las reglas de negocio del código y una manera efectiva de hacerlo es utilizando un motor de reglas.
En su forma más simple, un motor de reglas de negocio está compuesto de tres elementos: un conjunto de reglas, la base de conocimientos (conocida como área de trabajo) y el procesador de reglas. Las reglas son sentencias de la forma IF-THEN, de tal manera que si se cumplen todas las condiciones del IF se ejecutan todas las acciones del THEN. El motor utilizará la base de conocimientos para decidir que reglas deben activarse.
Read More »