复杂的算法 - 如何存储规则,从处理代码中分离出来?

我正在上会做一些复杂的分析某些用户提供的输入项目。 将有3份的代码:

1)输入由用户提供的,例如关键字

2)规则,如果关键字1被重复3次在关键字5,为此,等,如

3)而分析本身,它执行的规则和处理用户输入,并基于该处理所必需的输出。

当然,这会导致大量的意大利面条代码和许多,许多,如果在加工代码语句。 我想避免这种情况,并分别保持规则(即if语句),从该遍历用户输入并生成输出的代码。

我如何能做到这一点,即什么是最好的方法是什么?

--------------解决方案-------------

如果您有需要足够的外部化的规则,你可以尝试使用业务规则引擎,就像在Java中Drools的。

业务规则引擎是一个在运行时产品环境执行一个或多个业务规则的软件系统。 这些规则可能来自法律法规(“雇员可发射以任何理由或没有理由,但不是非法的理由”),公司的政策(“该花费超过$ 100以同一时间的所有客户都将获得10%的折扣” ),或其它来源。 (维基百科)

这可能是一点点的开销取决于你正在努力做的事情。 在我的公司,我们使用这样那样的为我们的质量分析工具的工具。

它存储在XML。 容易解析和更新。

我已经设计了一个码发生器,它可以从一个XML文件可控制的。 对于每个命令我曾在XML中的条目。 我正在处理的节点以生成操作码该命令。 节点本身包含了我需要做的获取操作码的操作。 对于一些命令,我​​必须寻找到数据库中,所有这些事情,我已经把这个XML文件。

好了,我怀疑这是需要有休斯,如果if语句多态性正确应用。

事实上,您需要为您的规则,一个合适的领域模型。 这又莫名其妙地到命令模式的方向,这取决于你的代码可能与状态机模式组合complexitiy。

一旦你有你的模型,定义规则是正确实例化它们。

这可以通过具有一个XML定义,它被解析并转化到模型来完成。 但是,新的现代化,更奇特的方法是使用的DSL。 如果你在Java程序,并有一定的自由,你的库,这将是一个正确使用情况下的嵌入式DSL的使用Groovy。 基本上,你需要一个生成器它构建模型,仅此而已。

你总是可以实现工厂,将根据传递的参数产生一定的策略。 然后你将使用这些策略在你的代码没有任何的话。

如果它只是检测关键字,有限状态机或类似。 如果它做更多,那么其他的模式匹配系统,如规则引擎。

添加一个嵌入式脚本语言 ,以您的应用程序可能会有所帮助。 规则将被表示在脚本中,通过在处理的应用程序的执行。

这个想法是,脚本是容易改变的,其中包含将在细节应用程序来执行高层次的逻辑。

有很多脚本语言的使用要做到这一点:Lua中,Python中,猎鹰,松鼠,angelscript等。

看一看规则引擎!

从拉斯的方法也可能是值得商榷的。

分类:算法 时间:2012-02-08 人气:0
本文关键词: 算法,设计
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.299 (s). 9 q(s)