一直困扰我的问题,得到了缓解,主要是受到了JBoss
Rules的启发。在经过了十几分钟疯狂的编程(就像周杰伦在不能说的秘密里斗琴的场景一样)之后,我终于完成了我想要的东西,几行测试代码,呈现绿条的
JUnit。沉郁多日小步前行,今天是我最近最爽的一次编程了。
public void testExecuteWorkingSpace() throws ClassNotFoundException{
RuleExpression ruleExpression= generateRuleExpression();
Stockpiling sri = new StockpilingRecordItem("01", 2500, 18);
ShipCapacity sc=new ShipCapacity(4000);
WorkingSpace ws=new WorkingSpace();
ws.bindingRuleWithFact(ShipCapacityCEI.class, ShipCapacity.class);
ws.bindingRuleWithFact(StockpilingDayIntervalCEI.class,
StockpilingRecordItem.class);
ws.setRuleExpression(ruleExpression);
ws.addFact(sri);
ws.addFact(sc);
assertTrue(ws.execute());
}
由于一个结果可能由多个条件限度得出,比如堆存费,我可以从StockpilingRecordItem中获得Days和Stact,来区分专堆
SpecialStackCEI和时间段StockpilingDayIntervalCEI这两个规则,我直接调用
conditionExpression.matching,并且传入StockpilingRecordItem对象即可。但是如果我再加一个,整船配
载量(ShipCapacity)影响费率,那怎么办?我总不能加一个条件,就给StockpilingRecordItem对象加一个属性吧。这显然又
要传入多个类似于StockpilingRecordItem的对象。然后我的规则引擎就能自动的判断哪个对象需要跟哪个规则进行matching,这样
各个规则对象的matching方法就会向下转型了。
好吧,我好像需要一个对象来做这件事,受到JBoss Rules的启发,我叫它WorkingSpace。
public void bindingRuleWithFact(Class condition, Class fact) ;
public void addFact(Object object) ;
public boolean execute();
先是要将条件表达式项和事实绑定(我之前都以非正式的语气称号它为事实,但是JBoss
Rules也这么称呼它,并且也以JavaBean的形式来表示事实,这使得我更加自信的去使用。于是我又加了个pacage叫facts,哦,那
StockpilingRecord可以将事实的生成服务,或者策略之类的了。这也让我对获得整船配载量的方法应该写在什么地方的问题不在疑惑,它只是一
个生成事实的服务类)。
然后我可以添加事实。比如
Stockpiling sri = new StockpilingRecordItem("01", 2500, 18);
ShipCapacity sc=new ShipCapacity(4000);
这样的事实对象。它们都是普通的JavaBean。过去我还在为它们是普通的JavaBean而感到羞愧,可是现在它们也变得名正言顺了。
这样,我就可以执行(execute)了。执行实际上只是,来判断我的条件都成立。
这与JBoss Rules比起来还有很大的差距。
它的WorkMemory直接读取规则定义文件:
when o:Order-->getQuantity>50
then
它的规则文件里直接将If then都搞定了。而我这里只能判断出if是否成立,之后的处理我还是写在计算策略(如StockpilingFeeCalculateStrategy)里。比如:
if (ce.matching(stockpilingRecordItem)) {
int matchingDays=calculateMatchingDays();
Rate rate=calculateRate();
int quantity=calculateQuantity();
charges = new StockpilingCharges(rate, quantity, matchingDays);
System.out.println(charges.total().getValue());
}
但实际上,我或许可以继续模仿JBoss Rules,将if成立的执行块中的代码extract成一个方法,然后在Move到一个新的Service中,最后将其写入到规则表达式的结果表达式中。
另外,JBoss Rules将规则是什么都写在规则文件里,而我写在了条件表达式项(比如StockpilingDayIntervalCEI)中。当我打算将这些写到文本文件里时,我想我会选择使用JBoss Rules,而现在我只打算参考它。
本来ShipCapacityCEI(我将条件表达式项都加了个CEI的后缀,是ConditionExpressionItem的缩写)是为计算免堆期准备的规则,可是现在我也可以把它加到判定费率的条件表达式里了。
在此,我再一次怀疑我的ConditionExpression使用了组合模式是否多余,我还来不及仔细分析它。
问题:
我可以在制定合同时做好规则和事实的映射。
但是,我怎么才能在计算时,让系统知道它需要哪些事实?
分享到:
相关推荐
之前学习jboss rules 只能自己一点点的啃英文用户指南,后来终于找到了中文版的翻译版本,真是高兴,立即奉献给大家,让对规则引擎感兴趣的朋友也能一堵为快。 内容摘要:JBoss Rules 的前身是Codehaus的一个开源...
JBoss Rules,现名为Drools,是一款强大的开源业务规则管理系统(BRMS),它允许开发者在应用程序中嵌入复杂的业务规则。本入门资料集锦涵盖了从基础到高级的多个方面,帮助初学者全面理解并掌握如何使用JBoss Rules...
JAVA规则引擎JBOSS RULES,也被称为DROOLS,是一种强大的业务规则管理系统,它允许开发者用自然语言来编写业务规则,并在运行时执行这些规则。DROOLS 6.5是该规则引擎的一个版本,提供了许多改进和新特性,以提高...
- **规则定义**:在 JBoss Rules 中,规则是对商业知识的一种编码形式,由属性、左侧条件 (LHS) 和右侧结果 (RHS) 组成。规则的作用是在特定条件下触发相应的业务行为。 - **属性详解**:规则支持多种属性设置,...
【JBoss Rules 初学实例】是针对Drools规则引擎的一个入门教程,适用于初次接触该框架的开发者。Drools是一款开源的业务规则管理系统,它允许开发人员以声明式的方式编写业务规则,使得复杂的逻辑处理变得更加简洁...
### jBoss Rules 用户指南知识点详解 #### 一、规则引擎概念及背景 ##### 1.1 什么是规则引擎 规则引擎是一种软件系统,它能够基于一组预定义的规则来处理数据,进而推导出结论或者执行特定的操作。规则引擎的...
Drools JBoss Rules是JBoss企业中间件产品套件的一部分,它是一个基于Java平台的业务规则引擎(Business Rules Engine),它允许业务逻辑从业务应用程序中分离出来,并以一种易于管理和维护的方式呈现。Drools JBoss...
### Drools JBoss Rules 5 开发者指南 #### 知识点一:Drools 平台介绍 - **定义与背景**:Drools 是一个开源业务规则管理系统(Business Rule Management System, BRMS),它支持开发人员通过声明式编程来实现...
myeclipse安装drools jboss rules规则引擎
规则引擎 Drools-JBoss Rules 规则引擎是人工智能(Artificial Intelligence)领域中的一种技术,用于实现专家系统,专家系统使用知识表示把知识编码简化成一个可用于推理的知识库。规则引擎是一个基于规则的方法...
《Drools JBoss Rules 5.0 Developer's Guide》是一本专为希望利用Drools平台开发基于规则的业务逻辑的开发者而编写的指南。本书由Michal Bali撰写,于2009年7月首次出版,并由Packt Publishing发行。该书涵盖了...
### Drools JBoss Rules 5.0 Developer's Guide:规则引擎技术详解 #### 一、概述 《Drools JBoss Rules 5.0 Developer's Guide》是一本深入讲解Drools规则引擎技术的书籍。本书由Michal Bali编写,旨在帮助读者...
《JBoss Drools Business Rules》为读者提供了深入学习 JBoss Drools 的机会,无论您是希望了解规则引擎的基本概念还是想要掌握其高级特性,这本书都能提供有价值的信息。通过学习本书,您可以更好地利用 Drools 来...
### JBoss Rules 用户指南知识点详解 #### 一、规则引擎概念及背景 1. **规则引擎定义**: - 规则引擎是一种软件系统,它使用预定义的规则来处理数据,以得出结论或采取行动。 - **背景介绍**:规则引擎的发展...
通过上述内容,我们可以看到JBoss Enterprise BRMS Platform-5-JBoss Rules 5 Reference Guide 是一个全面而深入的技术文档,旨在帮助JBoss管理员成功地部署、配置和管理Drools规则引擎。无论是对于新手还是有经验的...
JBoss Rules是JBoss应用服务器内置的业务规则引擎,它允许用户定义业务规则并通过规则服务来应用这些规则。 ### 结语 JBoss企业SOA平台5 ESB服务指南是一份非常宝贵的资源,它为开发者和管理员提供了在JBoss平台上...
jboss drool java 规则引擎
《Drools JBoss Rules 5.0 Developer's Guide》是一本专为开发者编写的书,主要介绍如何利用Drools平台来开发基于规则的业务逻辑。本书由Michal Bali撰写,并于2009年由Packt Publishing出版。 #### 关键知识点 **...
BRMS,即Business Rules Management System,是JBoss提供的一个基于Drools规则引擎的企业级业务规则管理系统。BRMS的目标是为用户提供一套完整的业务规则管理解决方案,帮助商业分析师、规则专家、开发人员及系统...