使用 Drools 规则引擎实现业务逻辑
2010-04-02 00:00:00 来源:WEB开发网如果计算机是 Type2 且其中一个功能为 Gateway,则应执行 Test3 和 Test4。
如果计算机是 Type2 且其中一个功能为 Router,则应执行 Test1 和 Test3。
如果 Test1 是要在计算机上执行的测试之一,则测试到期日期距离机器的创建日期 3 天。该规则优先于测试到期日期的所有下列规则。
如果 Test2 是要在计算机上执行的测试之一,则测试到期日期距离机器的创建日期 7 天。该规则优先于测试到期日期的所有下列规则。
如果 Test3 是要在计算机上执行的测试之一,则测试到期日期距离机器的创建日期 10 天。该规则优先于测试到期日期的所有下列规则。
如果 Test4 是要在计算机上执行的测试之一,则测试到期日期距离机器的创建日期 12 天。该规则优先于测试到期日期的所有下列规则。
如果 Test5 是要在计算机上执行的测试之一,则测试到期日期距离机器的创建日期 14 天。
捕获为机器分配测试和测试到期日期的上述业务规则的当前 Java 代码如清单 1 所示:
清单 1. 使用 if-else 语句实现业务规则逻辑
Machine machine = ...
// Assign tests
Collections.sort(machine.getFunctions());
int index;
if (machine.getType().equals("Type1")) {
Test test1 = ...
Test test2 = ...
Test test5 = ...
machine.getTests().add(test1);
machine.getTests().add(test2);
machine.getTests().add(test5);
} else if (machine.getType().equals("Type2")) {
index = Collections.binarySearch(machine.getFunctions(), "Router");
if (index >= 0) {
Test test1 = ...
Test test3 = ...
machine.getTests().add(test1);
machine.getTests().add(test3);
}
index = Collections.binarySearch(machine.getFunctions(), "Gateway");
if (index >= 0) {
Test test4 = ...
Test test3 = ...
machine.getTests().add(test4);
machine.getTests().add(test3);
}
...
}
// Assign tests due date
Collections.sort(machine.getTests(), new TestComparator());
...
Test test1 = ...
index = Collections.binarySearch(machine.getTests(), test1);
if (index >= 0) {
// Set due date to 3 days after Machine was created
Timestamp creationTs = machine.getCreationTs();
machine.setTestsDueTime(...);
return;
}
index = Collections.binarySearch(machine.getTests(), test2);
if (index >= 0) {
// Set due date to 7 days after Machine was created
Timestamp creationTs = machine.getCreationTs();
machine.setTestsDueTime(...);
return;
}
...
更多精彩
赞助商链接