Vous êtes sur la page 1sur 21

Drools

Introduccion
Reglas de negocio

 ¿Que son reglas de negocio?


 políticas, normas, operaciones, definiciones y
restricciones presentes en una organización
 Ejemplo de regla de negocio: “Si un cliente
realiza mas de tres transacciones con su tarjeta
de credito rechazar las operaciones siguientes”.

2
Problemas con la solucion
tradicional
 Los requerimientos de la capa de negocios, son
los que cambian mas a menudo.
 Los cambios generalmente involucran tiempo y
retrabajo.
 Una solucion standard utilzando algun lenguaje
imperativo (Java, C#) , terminara rapidamente en
spaghetti code y en montones de sentencias if-else
anidadas.

3
Problemas con la solucion
tradicional
 Por ejemplo;
if (customer.getLevel() == Level.Gold) {
● //do something for Gold customer
 } else if (customer.getLevel() == Level.Silver) {
● if (customer.getAccounts() == null) {
● //do something else for Silver customer with no accounts

● } else {
● for (Account account : customer.getAccounts()) {

● if (account.getBalance < 0) {

● //do something for Silver Customer that has

● //account with negative balance

● }

● }

● }
 }


4
La solucion

 El problema es que con lenguajes imperativos ,


estamos implementando lo que se tiene que hacer
(logica de negocio) y como se debe de hacer
(Algoritmo).
 Miremos al estilo declarativo, por ejemplo SQL.
SQL describe lo que queremos buscar, no dice
nada acerca de como la base de datos encontrara
la informacion.
 Eso es justamente lo que necesitamos de un
requerimiento de negocio.

5
Introduciendo Drools

 Basicamente Drools es un rule engine


 Un rule engine provee un modelo computacional
diferente. Las reglas son declaradas de manera
similar al que un analista de negocio levanta los
requerimientos – como un grupo de setencias if-
then.
 El rule engine toma estas reglas y las ejecuta
sobre los datos de manera mas eficiente.

6
Introduciendo Drools

 Escribiendo la regla de manera declarativa.


if Customer( level == Level.Gold )
then do something else for Gold customer
if Customer( level == Level.Silver )and no Account( )
then do something for Silver customer who has no accounts
if Customer( level == Level.Silver)
and Account( balance < 0, customer.accounts contains account )
then do something for Silver Customer that has account with
negative
balance

7
Ventajas

 Facil de entender
 Mantenimiento mas facil
 Reduce complejidad
 Flexibilidad

8
Drools Expert

Rule engine
Ejemplo reglas con drools

Problema:
Calcular la factura de un servicio
telefonico

Las reglas de caluclo cambia constantemente


Descuentos, promociones...
Ejmplo, Si llamas a media noche el precio de la llamada
es inferior al de la hora pico.

10
Escribiendo regla

rule "morningPhoneCall"
when
$p : PhoneCall(charged == false, startDateTime.hourOfDay < 12)
then
modify ($p) {
setBasePricePerSecond(new BigDecimal("0.05"));
}
end

rule "afternoonPhoneCall"
when
$p : PhoneCall(charged == false, startDateTime.hourOfDay >= 12)
then
modify ($p) {
setBasePricePerSecond(new BigDecimal("0.20"));
}
end
11
Drools Eclipse

Eclipse-based Tooling
Features

 Wizards
 Drools runtimes (classpath)
 Textual Rule Editor
● Syntax highlighting, code completion, error detection,
outline view, etc.
 Guided Editor
 Debugging
● Rule breakpoints
● Debug views

13
Textual Rule Editor

14
Domain-specific Rule Editor

15
Drools Guvnor

Knowledge Repository
Guvnor

 Technology
● JCR (JSR-170) backend
● Seam + GWT frontend
● WebDav
● Eclipse synchronisation plugin
● Role based security
 Authoring
● Decision Tables
● Guided Editor
 QA
● Scenario Testing + Rule Verification
17
Business asset storage

18
Guided Editor

19
Decision Tables

20
Scenario Testing

21

Vous aimerez peut-être aussi