Web应用程序中的Jboss Drools
我们有巨大的网络应用程序,我们正在为它增加新的功能。 因为它是Web应用程序,所以它使用Struts2,Spring框架。
我搜索了很多,在Web应用程序中找不到任何Jboss Drools使用教程。
任何人都可以根据Web应用/项目向我展示Drools Tutotial的工作。
是否可以配置Drools,以便如果用户在JSP中根据选定的选项选择几个选项,我可以启动Drools引擎吗? 通过开火,我应该能够动态地改变视图。
假设购物车[查看页面]中有三种产品。 如果用户选择A产品,我应该向他展示更多选项,如果用户同时选择A和B,禁用选择第三产品等... [从Drools控制视图]
试图扩展我的评论:我帮助一些同事演变和部署基于Struts2
/ Spring
和大量.drl
文件(133个文件,每个文件500到3000行)的巨大,丑陋的Web应用程序。
我可以肯定地说我现在意识到如何不使用Jboss Drools
:表示逻辑,工作流管理等等。
Jboss Drools
不是垃圾。 Jboss Drools
是一款出色的工具...如果它用于设计它:用您的应用程序的逻辑规则来帮助您。
问题在于,人们往往会根据这些技术看起来很酷,或者有一个冠冕堂皇的名字而不是真正需要使用它们,或者在一些好的(或者至少,执行)侦察。
Drools
它不是很快学习,(肯定)不快,但不容易维护,如果它被用于错误的目的,它会花费数周/数月的工作来获得可能不同的结果(可能更低)比预期。
从官方Drools Expert
文档(还有其他Drools
,请查看它们),您可以在这里找到示例以及所有您在此问题中提出的问题:http://docs.jboss.org/drools/release/5.2.0。最后/滴料,专家文档/ HTML / ch01.html
1.2.2。 什么时候应该使用规则引擎?
对此最简单的答案是“如果没有令人满意的传统编程方法来解决问题”。 鉴于这个简短的答案,需要更多的解释。 没有“传统”方法的原因可能是以下原因之一:
这个问题对于传统代码来说太过琐碎。
问题可能并不复杂,但您无法看到为其构建解决方案的非脆弱方式。
这个问题超出了任何明显的算法解决方案。
这是一个复杂的问题需要解决,没有明显的传统解决方案,或者基本上这个问题还没有完全理解。
逻辑经常变化
逻辑本身甚至可能很简单,但规则经常改变。 在很多组织中,软件版本很少,而且可插入的规则可以帮助提供合理安全的方式所需要的“敏捷性”。
领域专家(或业务分析师)随时可用,但是非技术性的。
领域专家通常拥有关于业务规则和流程的丰富知识。 他们通常是非技术性的,但可以非常合乎逻辑。 规则可以允许他们用自己的术语表达逻辑。 当然,他们仍然需要批判性思考,并且能够进行逻辑思维。 许多非技术职位的人没有形式逻辑方面的培训,所以要小心并与他们一起工作,例如通过将商业知识编入规则中,您常常会以目前对业务规则和流程的理解方式揭露漏洞。
最后一句话和三美元的账单一样。
如果您认为项目经理或秘书会在不涉及开发人员的情况下更改规则,因为“他们只是规则,而不是Java文件”......保持希望:D
除了编程技巧之外,规则还需要相当好的分析能力,而imho“Java”则相当容易。 非技术类(通常由PM所指)通常无法掌握修改所需的知识,也无法理解规则。
相反,大胆的点是真正的附加价值。
如果你正在开发一个处理例如抵押贷款的应用程序,并且每个月都会有变化的数学规则(利息税,系数等),那么使用Drools
是很好的。 你不需要改变你的应用程序的逻辑,你只需要改变公式,魔法就会发生。
但是,如果您使用Drools
是因为您认为它会阻止您的Web应用程序再次部署(请参阅:为了降低发布管理的成本),那么您应该考虑两次。
在做出决定之前,我建议至少进行几周的侦察; 这是可能会自动炸毁你手中的那种东西:/
从上面链接的相同文档:
1.2.3。 何时不使用规则引擎
定期引用Drools邮件列表:
在我看来,在使用规则引擎的兴奋之中,人们忘记了规则引擎只是复杂应用程序或解决方案中的一部分。 规则引擎并非真正用于处理工作流或流程执行,也不是用于执行规则的工作流引擎或流程管理工具。 使用正确的工具来完成这项工作。 当然,一对钳子可以用作捏合工具,但这不是它的设计目的 。 - 哈姆
由于规则引擎是动态的(动态的,因为规则可以作为数据存储和管理和更新), 它们通常被视为解决部署软件问题的解决方案 。 (大多数IT部门似乎都是为了防止软件被推出而存在的。) 如果这是您希望使用规则引擎的原因,请注意,当您能够编写声明性规则时,规则引擎工作得最好。 作为替代,您可以考虑数据驱动的设计(查找表)或脚本处理引擎,脚本在数据库中进行管理,并且可以随时更新。
作为最后的想法,你所描述的要求在我看来似乎是相当静态的,并不能发展
1)用户选择一个对象
2)用户选择多个对象
这将很难成为不同的东西,我从来没有见过一个应用程序或网站之间以不同的方式处理一个多选2
, 3
或10
元。 它是==1
,或者它是>1
。
如果它会发展,那么你也需要改变代码; 如果今天你会执行一个>1
动作,并且明天你将执行两个不同的动作: >1 && <=5
和>5
...然后你将不得不编写这些新的动作。
这不是Drools的意思,在我的谦虚,谦虚的意见。
链接地址: http://www.djcxy.com/p/45353.html