我在写一些使用很多规则的系统。现在是我组织它们并使其高效的时候了。主要要求是 - 商业友好,易于理解,易于查找,易于维护,可测试。Python中的规则引擎
这个问题不是关于如何创建规则引擎。我不写一个。我的目标是想方设法在一个地方维护很多规则。并让它变得容易。我需要一些专业建议如何去做,采取什么方法。以下是我已经证明我正在从事这项工作的例子,而不是简单地要求某人去做我的工作。
到目前为止,我有3种方法:
1)阵列类型:
item=context.GetNextItem()
if ['banana','apple','orange'].Contains(item): EatRaw(item)
if ['banana','apple','potato'].Contains(item): BakeAndEat(item)
if ['meat','egg','potato','fish'].Contains(item): FryAndEat(item)
if ['pasta','egg','potato'].Contains(item): BoilAndEat(item)
2)每个项目分隔的文件:
item=context.GetNextItem()
execfile(str(item)+'.py')
#banana.py:
EatRaw(item)
BakeAndEat(item)
#potato.py:
BakeAndEat(item)
FryAndEat(item)
BoilAndEat(item)
3) 存储数据库:
item=context.GetNextItem()
SQL = "SELECT rule FROM rules where item='"+str(item)+"';"
for row in cursor.execute(SQL):
eval(row.rule+"(str("+item+"))")
表规则
banana,EatRaw
banana,BakeAndEat
potato,BakeAndEat
potato,FryAndEat
potato,BoilAndEat
3.A)数据文件
文件RULES.txt
banana,EatRaw
banana,BakeAndEat
potato,BakeAndEat
potato,FryAndEat
potato,BoilAndEat
该文件可能是视为一个用户界面。
每种方法都有自己的缺点和优点,但说实话,我对任何方面都不满意。文件越来越庞大,难以搜索,维护和理解。任何其他方法或建议是受欢迎的。
谢谢。这不是代码问题,它是方法问题。 – Alex
@larsks:Code Review对于“更高级别的体系结构和软件系统设计”的问题显然不是*,我相信这个问题是关于。 –
@ Qantas94Heavy:然而,这里也不是,只有更多。这是我的最好建议。 – larsks