Drools Decision Tables 使用指南

Jboos Drools支持利用电子表格生产的决策表的形式描述规则。droos根据相应的语法和格式要求,会将其装换成相应的drl文件形式的代码。

Decision Tables语法

关于决策表的语法,具体可参考官方文档,这里不一一详述:
https://docs.jboss.org/drools/release/7.3.0.Final/drools-docs/html_single/index.html#_rule_set_entries

Rule Set Entries
Drools Decision Tables 使用指南_第1张图片
Rule Set Entries.png
Rule attribute entries in the Rule Set area
Drools Decision Tables 使用指南_第2张图片
Rule Attributes_1.png
Drools Decision Tables 使用指南_第3张图片
Rule Attributes_2.png
Column Headers in the Rule Table
Drools Decision Tables 使用指南_第4张图片
Column Headers.png

决策表使用

决策表的使用非常简单,Drools的sample项目中自带了一个简单的利用电子表格表达决策的样例。这里不再赘述,为了展示Decision Tables的用法,这里给出了一个简单的Demo。

Drools Decision Tables 使用指南_第5张图片
dcTables.png

假设我们有一个关于用户评分的需求,根据不同的用户属性,会给出相应的得分,详情见上图。
代码如下:

package com.sample;

import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;

/**
 * This is a sample class to launch a rule.
 */
public class DecisionTableTest2 {

    public static final void main(String[] args) {
        try {
            // load up the knowledge base
            KieServices ks = KieServices.Factory.get();
            KieContainer kContainer = ks.getKieClasspathContainer();
            KieSession kSession = kContainer.newKieSession("ksession-dtables-test");
            
            Person person = new Person();
            
//          person.setAge(17);
//          person.setGender(0);
//          person.setZmScore(710);
//          
//          person.setAge(18);
//          person.setGender(0);
//          person.setZmScore(650);
//          
//          person.setAge(18);
//          person.setGender(1);
//          person.setZmScore(650);
//          
//          person.setAge(24);
//          person.setGender(1);
//          person.setZmScore(650);
//          
            person.setAge(24);
            person.setGender(0);
            person.setZmScore(652);
//          
//          person.setAge(24);
//          person.setGender(1);
//          person.setZmScore(710);
//          
//          person.setAge(24);
//          person.setGender(0);
//          person.setZmScore(710);
//          
            kSession.insert(person);
            kSession.fireAllRules();
            
//          kSession.getKieBase().getKiePackages().forEach(pkg->{
//              pkg.getRules().forEach(rule->{
//                  System.out.println(rule.getName());
//              });
//          });
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }

    
    public static class Person {
        
        private int age;

        private int gender;
        
        private int zmScore;
        
        private int score = 0;

        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }

        public int getGender() {
            return gender;
        }

        public void setGender(int gender) {
            this.gender = gender;
        }

        public int getZmScore() {
            return zmScore;
        }

        public void setZmScore(int zmScore) {
            this.zmScore = zmScore;
        }

        public int getScore() {
            return score;
        }

        public void setScore(int score) {
            this.score = score;
        }

    }

}

代码的运行结果如下:

result.png

你可能感兴趣的:(Drools Decision Tables 使用指南)