我正在开发一个决策引擎/规则评估引擎。例如:
输入:客户和客户所做的所有违规行为
输出:犯罪的后果
一个示例是:
输入:客户(Jhonny Chimpo,999-00-1111),违规行为(打破窗户,扇老板耳光,踢团队领导的腹股沟)
输出:收到解雇通知
因此,我要写的这段代码根据每个罪行和组合罪行的规则来评估不同的罪行。当前的代码只是if和else语句的迷宫。我相信这样的商业问题是很常见的。通常使用什么设计/企业模式来解决这样的问题?
这是规范模式吗?我想要的代码是开放的扩展,干净和灵活。
发布于 2010-01-24 21:15:16
基本上,业务规则如下所示
forall rules:
if <condition> then doAction();用分数对所有的犯罪行为按严重程度进行分类,也许是对经常“作恶者”的额外奖励,有些犯罪行为可能会变得有时间限制,或者任何需要的。
然后,算法的粗略草稿可以是:
客户(weighted)
这将直接使用数据结构,而不是许多(可能是深度嵌套的) if..then..else内容。
发布于 2010-01-24 19:28:21
我可以向你推荐一个我们用来解决类似问题的工具。
看看JBoss Drools:http://www.jboss.org/drools/
它是一个BRMS:业务规则管理系统
这是一个介绍性的视频:http://www.jboss.com/products/platforms/brms/
发布于 2010-02-08 08:22:04
我不确定上面的答案有没有那么有帮助。
我曾经使用expression trees编写过类似的组件。您可以构建表示谓词的lambda表达式,编译并执行它们,所有这些都是动态的,然后触发一些响应动作。这种方法是强大的,灵活的,并去除了所有的if/else的恐怖(这绝对不是去的方式)。
然而,您真正谈论的是逻辑编程。Prolog在.NET上有很多实现,它是一种基于逻辑的语言,经常用于AI应用,一旦你掌握了它的范例,它就会变得非常强大。
看一下其中的一些..
https://stackoverflow.com/questions/2126729
复制相似问题