我遇到了一个问题,我想询问现有技术的替代方案,因为编程的功能很复杂并且会提供给用户,所以它应该像前端一样简单。我需要基于java的技术。
我需要做什么: 我有一个包含大量数据的基本结构。这些数据大多写得很好,如整数,日期,布尔等,所以可以轻松比较的东西。
我需要用多批需求来确定决策的模型,这些需求可以由内部业务流程和政府法律等许多来源定义和修改。
所以我想为用户提供脚本编写能力(他们中的大多数都拥有大学学位,所以有些复杂性可以。)
让我们看一个简化的例子。
设A是具有以下结构
A.budget - 整数
A.bankRelatedDebt - 整数
A.privateRelatedDebt - 整数
A.deadLine - 日期
A.hasPermissionFromGovernment - 布尔
A.hasProblematicContracts - 布尔
我需要定义规则来决定规则是站不起来,所以我需要布尔回来 规则1:预算超过100万欧元 规则2:没有问题的文件或得到政府的许可 规则3:截止日期不会在一个月的范围内 规则4:总债务(本地+私人)不超过100.000欧元
这些规则在其他情况下可能是硬编码的,但这必须是超级动态的并且基于给定的数据。
我们可以选择 drools 和 antlr 如果您能提及,我需要替代方案。或者如果你能提到要避免的技术,这也很有帮助,也欢迎,所以我可以避免它。
答案 0 :(得分:1)
为了它的价值。 我也很想做这样一个专家系统,所以请耐心等待。首先是你要问什么要避免的一些负面因素。
有许多陷阱。
“编程”由用户完成,可能没有用于恢复的版本控制系统,可能没有登台系统,但有一个在生产系统中工作。考虑明智地扩展公共库规则测试。没有单元测试?
然后有用户接受。特别是有一个竞争对手,Excel编程,你必须取代。使用人类可选文本块,图表生成报告。
你的编号规则仍然缺乏一些生命:系统可以协助提供以下选择的类别:规则1 - 对货币资源的限制。不错的是提议“你是否也想限制限制资源?(a)规则1,(b)......。
该产品又是什么?有什么好处?目标是什么? 报告,计算方案(假设,通过计算公差)。
我当然会首先在上面的行中编写技术文档,然后而不是搜索工具 - 正如您似乎正在做的那样。 Drools太基本了。我发现DSL的ANTLR存在风险。
工具强> 的
数据挖掘似乎是您要搜索的关键字。
JVM编程语言Scala(不容易获得)对DSL进行解析非常有效。 许多函数式语言都比较容易,也提供了脚本编写(Java脚本API)。
Web项目怎么样,可能使用jetty作为嵌入式Web服务器。因此,您可以应用HTML和JavaScript。 HTML5?
富客户端平台(eclipse或NetBeans)需要快速开发的经验。对于漂亮的图形,也许是JavaFX(太早了)。
答案 1 :(得分:1)
我们使用CodeMirror在网页中提供语法突出显示。 Groovy非常适合我们。
答案 2 :(得分:1)
就像strategy pattern一样,所有不同的规则都适用于Context(A)不同的算法,算法可以在运行时选择。
为此添加过滤器链设计模式,以便您可以同时选择不同的算法(规则)。
Roolie是一个非常简单的Java规则引擎,可能对你有所帮助。正如Roolie所说:
Roolie是一个非常简单的Java规则引擎(非JSR 94),它使用您在Java中创建的规则。只需创建基本规则,为每个规则实现单个“传递”方法,然后将它们链接在一起,形成更复杂的规则。
答案 3 :(得分:1)
我会反对流口水,因为我有可怕的经历,但有些人喜欢它 我会提出一种已经集成在java:JavaScript中的语言。为什么呢?
但如果选择JavaScript,Python,Drools,ANTLR请记住:
请记住:他们将以您不期望的方式使用该工具,并且您最终将编写(或重写)大多数脚本。没有大学学位意味着你可以信任他们了解他们在做什么。 (甚至不是CS!)
因此,如果您可以降低系统的动态,那将是您的利益
答案 4 :(得分:0)
如果您在数据库中有记录,则可以使用SQL语法选择匹配的记录。
例如:
SELECT * FROM data
WHERE budget > 100000
AND privatCredits < 50000