我们拥有庞大的网络应用程序,我们正在为其添加新功能。 作为它的Web应用程序,它使用的是Struts2,Spring框架。
我搜索了很多,在Web应用程序中找不到任何Jboss Drools使用教程。
任何人都可以向我展示基于Web应用程序/项目的Drools Tutotial。
是否可以配置Drools,以便如果用户在JSP中选择几个选项,基于所选选项,我可以解雇Drools引擎吗?通过触发,我应该能够动态地更改视图。
假设购物车[查看页面]中有三种产品。如果用户选择A产品,我应该向他显示更多选项,如果用户同时选择A和B,禁用选择第3个产品等... [从Drools查看控制]
答案 0 :(得分:6)
尝试扩展上面的评论:我帮助一些同事根据Struts2
/ Spring
和大量.drl
文件(133个文件)发展和部署庞大,丑陋的Web应用程序,每一行500至3000行。
我可以肯定地说我现在知道如何不使用Jboss Drools
:表示逻辑,工作流程管理等。
Jboss Drools
不是垃圾。 Jboss Drools
是一个很棒的工具......如果用于它的设计目的:帮助您处理应用程序的LOGIC规则。
问题在于,人们通常会根据这些技术看起来很酷,或者说名称高,而不是真正需要使用它们,或者在某些优点之后选择将哪些技术放入堆栈中(或者至少,进行了侦察。
Drools
它不是(所以)快速学习,(绝对)不能快速整合,不能(很容易)保护,如果它被用于错误的目的,它将吞噬数周/月的工作,结果可能与预期不同(可能更低)。
从官方Drools Expert
文档(还有其他Drools
,请查看),您可以在这里找到示例以及您在此问题中提出的所有问题:http://docs.jboss.org/drools/release/5.2.0.Final/drools-expert-docs/html/ch01.html
<强> 1.2.2。什么时候应该使用规则引擎?
最简单的答案是&#34;当没有令人满意的时候 传统的编程方法来解决问题。&#34;。鉴于 简短的回答,需要更多的解释。之所以有 不是传统的&#34;方法可能是以下之一:
这个问题对传统代码来说太小了。
问题可能并不复杂,但您无法看到为其构建解决方案的非脆弱方式。
问题超出了任何明显的算法解决方案。
这是一个需要解决的复杂问题,没有明显的传统解决方案,或者基本上问题还没有完全理解。
逻辑经常更改
逻辑本身甚至可能很简单,但规则经常发生变化。在许多组织中,软件版本很少 和可插拔的规则可以帮助提供敏捷性&#34;这是必要的 以合理安全的方式预期。
领域专家(或业务分析师)随时可用,但不具备技术性。
领域专家通常拥有丰富的业务规则和流程知识。他们通常是非技术性的,但可能非常 逻辑。规则可以允许他们用自己的术语表达逻辑。 当然,他们仍然需要批判性地思考并且有能力 逻辑思维。许多非技术职位的人没有 在形式逻辑上进行训练,所以要小心并与他们一起工作,如同 在规则中编纂商业知识,你经常会暴露出来 目前了解业务规则和流程的方式。
最后一句与三美元钞票一样假。
如果您认为项目经理或秘书将在不涉及开发人员的情况下更改规则,因为&#34;他们只是规则,而不是Java文件&#34; ...继续希望:D
规则需要相当好的分析技能,除了编程技巧,还有imho&#34; Java&#34;很容易。 非技术(通常由PM表示)通常无法掌握修改所需的知识,也无法理解规则。
相反,粗体点是真实的值。
如果您正在开发一个处理抵押贷款的应用程序,并且每月都会更改数学规则(利息税,系数等),那么使用Drools
是好的。你不需要改变你的应用程序的逻辑,你只需改变公式就会发生魔法。
但是如果你使用Drools
,因为你认为它会阻止你的webapp被部署(阅读:降低发布管理的成本),那么你应该考虑两次。
在做出决定之前,我建议至少进行几周的侦察;这种情况可能会在你手中自动:/
从上面链接的相同文档:
<强> 1.2.3。何时不使用规则引擎
引用Drools邮件列表:
在我看来,在使用规则引擎的兴奋中,人们忘记了规则引擎只是复杂的一部分 应用或解决方案。规则引擎并非真正意图 处理工作流程或流程执行,也不是工作流引擎或 旨在制定规则的流程管理工具。使用正确的工具 工作。当然,一把钳子可以用作锤子工具 捏,但这不是它为设计的。 --Dave Hamu
由于规则引擎是动态的(在规则可以存储和管理并更新为数据的意义上是动态的),它们通常是 看作是部署软件问题的解决方案。 (最 IT部门似乎以防止软件为目的而存在 正在推出。)如果这是您希望使用规则的原因 引擎,请注意,当您能够执行时,规则引擎最有效 写声明性规则。作为替代方案,您可以考虑 数据驱动设计(查找表)或脚本处理引擎 脚本在数据库中管理并且能够更新 在飞行中。
作为最后的想法,你所描述的要求在我看来是非常静态的,不能发展
1)用户选择一个对象
2)用户选择多个对象
这几乎不会变得与众不同,我从未见过在2
,3
或10
元素之间以不同方式处理多选的应用程序或网站。它是==1
,或者是>1
。
如果它会发展,那么你也需要改变代码;
如果今天您将为>1
执行一项操作,明天您将对>1 && <=5
和>5
执行两项不同的操作......那么您也必须对这些新操作进行编码。< / p>
这不是Drools的意思,在我的谦卑,谦逊的意见中。