决策表的本机Java解决方案
我正在和一位尊敬的同事进行一次有趣的讨论,并希望得到一些额外的意见 我需要在我的应用程序中实现一些基本的决策表逻辑。我希望使用OpenL平板电脑,它在Excel电子表格中表示决策数据。我喜欢它,它易于设置和维护,内存和处理空间小。我可以很容易地添加新表,我有一些表有超过100行和多达10个条件。这些数据非常静态,很少更改 我的同事不想在混合中引入第三方api,并对绑定到Microsoft文件格式持保留态度 我明白他的意思,但我能看到的通过Java实现决策表的唯一方法是编写一系列难看的if或case语句,这对于较小的表很好,但是当我使用较大的表时,就会变得难以管理 有人对争论的双方都有什么评论吗。如果有人对一种模式有什么想法,可以用原生Java解决我的问题,我很想听听决策表的本机Java解决方案,java,rules,decision-tree,Java,Rules,Decision Tree,我正在和一位尊敬的同事进行一次有趣的讨论,并希望得到一些额外的意见 我需要在我的应用程序中实现一些基本的决策表逻辑。我希望使用OpenL平板电脑,它在Excel电子表格中表示决策数据。我喜欢它,它易于设置和维护,内存和处理空间小。我可以很容易地添加新表,我有一些表有超过100行和多达10个条件。这些数据非常静态,很少更改 我的同事不想在混合中引入第三方api,并对绑定到Microsoft文件格式持保留态度 我明白他的意思,但我能看到的通过Java实现决策表的唯一方法是编写一系列难看的if或cas
非常感谢您抽出时间。嗯,这是一次完全幼稚的尝试:
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;
});
somefile.bsh可能如下所示:
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;
}
var规则=新数组();
rules.push(函数(var){
如果(var.getProperty()==0)返回true;
否则返回false;
});
rules.push(函数(var){
if(var.getProperty()<1000)返回true;
否则返回false;
});
... 更多规则。。。
对于(规则中的var func){
如果(!func(myObject))中断;
}
这将给您比重新编译Java源代码更大的灵活性来更改规则
如果你的应用程序需要高性能,那么在大型表上,这种简单的方法很快就会变慢。例如,在大多数情况下,OpenL平板电脑索引决策表,为任何表大小提供恒定的性能
2) 一旦开始在naive方法的基础上构建,您将看到需要实现不同类型的条件、不同类型的数据解析器等
3) OpenL平板电脑允许您在任何支持Java的平台上使用.xls文件,它只是一种存储格式,库本身就是纯Java。最后,Excel文件是整个世界中最容易转换/导出/导入的文件格式之一
4) 由于切换到最新的ApachePOI库来解析xls和xlsx文件,OpenLTablets运行时依赖项的大小最近有所增加。按照现代标准来看,它仍然是温和的:)关于MS Excel,它不是唯一可以创建Excel文件的软件,Star/Open/LibreOffice也可以编辑它们。由于决策表和LTables要求的一样简单,所以不应该存在任何兼容性问题
还有其他众所周知的工具将excel用于决策表(阅读JBoss Drools)哇,谢谢Chris。我想我可以用这个做点什么。。。我要试一试。非常感谢。我高兴地报告,我已经赢得了我的同事。该产品的演示和对上述要点的解释起到了作用。我不太喜欢重新发明轮子,openL平板电脑完美地满足了我的需求。
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");
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;
}