[英]Jboss Drools in a Web Application
我们拥有庞大的Web应用程序,并且正在为其添加新功能。 作为Web应用程序,它使用的是Struts2,Spring框架。
我在Google上搜索了很多,找不到Web应用程序中有关Jboss Drools使用的任何教程。
谁能告诉我基于Web应用程序/项目的Drools Tutotial。
是否可以配置Drools,使得如果用户在JSP中选择的选项很少,则可以基于所选选项启动Drools引擎? 通过触发,我应该能够动态地更改视图。
假设购物车[查看页面]中有三种产品。 如果用户选择A产品,则我应该向他显示更多选项,如果用户同时选择A和B,则禁用选择第3种产品,等等... [从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邮件列表:
在我看来,使用规则引擎很激动,人们忘记了规则引擎只是复杂的应用程序或解决方案中的一个。 规则引擎并非真正旨在处理工作流或流程执行,也不是旨在设计规则的工作流引擎或流程管理工具。 使用正确的工具完成工作。 当然,可以在钳口中使用一把钳子作为锤击工具,但这不是它的设计目的 。 -戴夫·哈姆(Dave Hamu)
由于规则引擎是动态的(在某种意义上,规则可以作为数据进行存储,管理和更新, 因此是动态的 ), 因此它们通常被视为解决软件部署问题的解决方案 。 (似乎大多数IT部门都是为了防止软件推出而设立的。) 如果这是您希望使用规则引擎的原因,请注意,当您能够编写声明性规则时,规则引擎最有效。 作为替代方案,您可以考虑数据驱动的设计(查找表)或脚本处理引擎,其中脚本在数据库中进行管理,并且可以即时更新。
作为最后一个问题,您描述的要求似乎我的东西相当静态的,不能发展那么多
1)用户选择一个对象
2)用户选择多个对象
这将很难成为不同的东西,我从来没有见过一个应用程序或网站之间以不同的方式处理一个多选2
, 3
或10
元。 它==1
或>1
。
如果它会发展,那么您也需要更改代码。 如果今天您将对>1
执行一个动作,而明天您将对>1 && <=5
和>5
执行两个不同的动作,那么您也必须对这些新动作进行编码。
在我的拙见中,这不是Drools的意思。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.