2011-05-04 16 views
6

estoy haiving una interesante discusión con un estimado colega y me gustaría alguna entrada adicional ...solución a Java Native tabla de decisión de

que necesito para poner en práctica algo de lógica básica tabla de decisión en mi solicitud. Estaba buscando utilizar OpenL Tablets, que representa los datos de decisión en una hoja de cálculo de Excel. Me gusta, es fácil de configurar y mantener y tiene una memoria pequeña y una huella de procesamiento. Puedo agregar nuevas tablas fácilmente y tengo algunas tablas con más de 100 filas y hasta 10 condiciones. Esta información es bastante estática y rara vez cambia.

Mi colega no desea introducir una API de terceros en la mezcla y tiene reservas sobre estar vinculado a un formato de archivo de Microsoft.

Veo su punto, pero la única forma que puedo ver de implementar la tabla de decisiones a través de Java es codificar una serie de sentencias feas o case, lo cual está bien para las tablas más pequeñas pero se volvería inmanejable cuando llegue al mesas más grandes.

¿Alguien tiene algún comentario en ambos lados del argumento. Si alguien tiene alguna idea sobre un patrón que podría resolver mi problema en Java nativo, estaría interesado en escucharlo.

Muchas gracias por su tiempo.

Respuesta

8
Hmmm

, un completo ingenuo intento:

public interface Condition<Type T> { 
    public boolean process(T object); 
} 

ArrayList row = new ArrayList<Condition>(10); 
row.add(new Condition<YourObject>() { 
       public boolean process(YourObject obj) { 
         if (obj.property > 0) return true; 
         else return false; 
       }); 
row.add(new Condition<YourObject>() { 
       public boolean process(YourObject obj) { 
         if (obj.property2 == 100) return true; 
         else return false; 
       }); 

allí tendría que recorrer:

for (Condition<YourObject> cond : row) { 
    if (! cond.process(yourobj)) break; 
} 

Un ejemplo un poco más sofisticado que puede escribir su tabla de decisión en javascript mucho más sucinta, y tal vez usa Beanshell para ejecutar la lógica. Tendría que golpear un caparazón y golpear esto un poco antes de poder publicar un ejemplo.

O es posible que, si publicó un ejemplo, alguien podría encontrar algunas rutinas simples de Scala para hacer lo que quiera.

EDIT:

así que hice un poco de investigación y pensamiento, y por Beanshell que podría utilizar algo así:

import bsh.Interpreter; 

Interpreter i = new Interpreter(); // Construct an interpreter 
YourObject yourObject = new YourObject(); 
i.set("myObject", yourObject); 

// Source an external script file 
i.source("somefile.bsh"); 

Y somefile.bsh podría tener este aspecto:

var rules = new Array(); 
rules.push(function(var) { 
      if (var.getProperty() == 0) return true; 
      else return false; 
      }); 
rules.push(function(var) { 
      if (var.getProperty() < 1000) return true; 
      else return false; 
      }); 
... more rules ... 

for (var func in rules) { 
    if (!func(myObject)) break; 
} 

Esto le daría más flexibilidad para cambiar las reglas que recompilar la fuente de Java.

Habría que añadir otra matriz a cualquiera de estas soluciones para conseguir sus 100 Fuente "filas"

+1

Wow, gracias Chris. Creo que puedo hacer algo con esto ... Voy a darle un giro. – Elwood

4

1) Si su aplicación necesita un alto rendimiento, el enfoque ingenuo se volverá lento muy pronto en tablas grandes. Por ejemplo, OpenL Tablets indexa las tablas de decisiones en la mayoría de los casos, proporcionando un rendimiento constante para cualquier tamaño de tabla.

2) Una vez que se empieza a construir en la parte superior del enfoque ingenuo, verá que es necesario implementar diferentes tipos de condiciones, programas de análisis de datos para diferentes tipos etc.

3) OpenL tabletas que permite a utilice archivos .xls en cualquier plataforma compatible con Java, es solo un formato de almacenamiento, la biblioteca en sí misma es Java pura.Y finalmente, el archivo Excel es uno de los formatos de archivo más fácilmente convertidos/exportados/importados en todo el Universo.

4) El tamaño de la dependencia del tiempo de ejecución de OpenL Tablets creció recientemente debido al cambio a la última biblioteca de POI de Apache para analizar archivos xls y xlsx. Todavía es modesto para los estándares modernos :)

+1

Muchas gracias. Estoy contento de informar que he ganado a mi colega. Una demostración del producto y una explicación de los puntos anteriores hicieron el truco. No soy un gran fan de reinventar la rueda y openL Tablets hace lo que necesito perfectamente. – Elwood

0

Acerca de MS Excel, NO es el único software que puede crear archivos de Excel Star/Open/LibreOffice puede editarlos también. Y siendo tan simples como las tablas de decisiones que requiere LTables, no debería haber ningún problema de compatibilidad.

También otras herramientas conocidas usan excel para tablas de decisión (léalas JBoss Drools)

Cuestiones relacionadas