2010-11-05 105 views
3

我有一个应用程序,将需要一个“动态业务规则”引擎。一些业务规则变化非常频繁。然后一些申请有限的一组商业账户。例如:根据客户的规模,销售人员的数量,产品的数量,地点等,我的客户有一个符合商店资格的流程。但他管理着不同的帐户,每个帐户对每个属性都给予不同的“权重”。在轨道上的红宝石动态业务规则引擎

如何使用Ruby实现此引擎?我知道Java有流口水,但我觉得流口水令人讨厌和复杂。我宁愿没有如果你确定一个规则引擎是你需要使用JRuby的...

问候,

Rubem

+0

谁会定义可能的规则程序?你或用户​​?你可以将它们编写为某个对象的方法,然后将方法名称添加为帐户对象的属性? 'Rules.send(self.rule_name,self.rule_params)'? – Arsen7 2010-11-05 08:40:18

+0

用户。预先编写所有可能的规则变体是不可能的。 – razenha 2010-11-05 12:34:55

回答

6

,你需要找到一个你可以在Ruby中使用。快速的谷歌搜索提出了Rools(http://rools.rubyforge.org/)和Ruby Rules(http://xircles.codehaus.org/projects/ruby-rules)。但我不确定任何一个项目的状态。使用JRuby和Drools可能是你最好的选择,但是再一次,我是一个Java开发人员和一个大的Drools倡导者。 :)

不知道所有的细节,这是很难说如何实现。这也取决于你希望如何更新规则。一种方法是编写一系列与此类似的规则:“如果一家商店存在超过50名销售人员,并且商店没有更新其体重以反映这一点,则更新商店的重量。”但是,以某种方式,您可以将其与硬编码进行比较。

更好的方法可能是创建具有需要满足权重才能应用的条件的Weight对象。然后,您可以编写一条匹配“权重”和“商店”的规则:“如果商店存在与权重条件匹配的商店,并且商店尚未将该权重分配给该商店,则将该称量添加至商店。”然后,业务人员可以创建和更新权重,可能在Web前端数据库中,而不是维护规则。

+0

我喜欢你的建议:) – razenha 2010-11-23 05:23:14

+0

随意接受它作为答案。 ;)我很想知道你最终使用了什么规则引擎。当我决定规则引擎很可能是未来的必需品时,我刚刚学习Ruby/Rails。所以,我回到了Java和Drools。有良好的,维护良好的Ruby规则引擎吗? – spaaarky21 2010-12-28 06:31:10

+0

您还可以使用其他产品,使您可以让REST API服务器和您的应用程序在服务层中进行交互。所以你不需要担心技术堆栈,然后你会有更多的选择。例如,您可以将[JavaScript客户端库](http:// http://www.flexrule.com/archives/javascript-decision-as-a-service/)与服务通信以执行您的业务规则在一个REST API接口中。 – 2015-05-26 04:15:39