Python中的规则引擎

时间:2015-05-15 15:23:01

标签: python rule-engine

我正在编写一些使用大量规则的系统。现在是我组织它们并使它们高效的时候了。主要要求是 - 业务友好,易于理解,易于查找,易于维护,可测试。

这个问题与如何创建规则引擎无关。我不写一个。我的目标是找到在一个地方维护很多规则的方法。并使其变得简单。我需要一些专业知识建议如何做,采取什么方法。下面是我已经做过的示例,我已经表明我正在完成这项任务而不是简单地要求某人完成我的工作。

到目前为止,我有3种方法:

1)数组类型

item=context.GetNextItem()
execfile(str(item)+'.py') 

#banana.py:
EatRaw(item)
BakeAndEat(item)

#potato.py:    
BakeAndEat(item)
FryAndEat(item)
BoilAndEat(item)

2)每个项目的分隔文件

item=context.GetNextItem()
SQL = "SELECT rule FROM rules where item='"+str(item)+"';"
for row in cursor.execute(SQL):
    eval( row.rule+"(str("+item+"))" )

3)存储数据库

banana,EatRaw
banana,BakeAndEat
potato,BakeAndEat
potato,FryAndEat
potato,BoilAndEat

表格规则

banana,EatRaw
banana,BakeAndEat
potato,BakeAndEat
potato,FryAndEat
potato,BoilAndEat

3.a)档案中的数据

文件RULES.txt

newButton_Click

此文件可被视为用户界面。

每种方法都有自己的缺点和优点,但说实话,我对任何方法都不满意。文件增长,变得笨重,难以搜索,维护和理解。欢迎任何其他方法或建议。

1 个答案:

答案 0 :(得分:2)

让我们放大一下这句话:

  

主要要求是 - 商业友好,易于理解

但是,到目前为止,您的方法很容易让程序员理解,但对于业务用户来说并不是特别容易理解。

你正在从错误的方向解决这个问题,你开始使用“哪个数据结构有益于人机工程学”,而不是“用户如何查看或修改'规则'”

从良好的几轮UI设计开始。一旦你有了它们,把它放在潜在用户面前(如果你有的话),那么实现将自然而然地进行,无论哪种模拟或支持生成的UI工作和使用的方式。

编辑:

“ui”不一定是一个花哨的单页javascript应用程序,它可以是特定网络共享上的文本文件,每天由cron作业读取,这仍然是一个“用户界面”。以与业务用户需求和可用预算兼容的方式进行设计。