我想我需要一个简单的规则引擎? [关闭]

2024-04-05

我需要一些关于解决这个问题的最佳方法的建议。

我研究了 DROOLS、Java 规则引擎和其他一些引擎。所有这些都很强大,并且都有好处。我不知道哪一个(如果有的话)对我来说是最好的选择。

我有一个商业对象。 (为了演示而简化)

Person
     firstName:String
     lastName:String
     departMent:String
     hireDate:Date

我需要在 Web 应用程序中编写一个编辑器,允许围绕这些字段构建复杂的规则。我需要支持复杂的嵌套 AND/OR 逻辑。我只需要基本运算符,并且规则应该简单地评估为 true 或 false。如果规则评估为 true 或 false,则将分别发生一个操作。

例如,

名字包含“值”并且 (姓氏等于“输入”或部门 包含“输入”)

我曾想,也许我应该编写自己的解析器并评估自己代码中的逻辑。我不知道该怎么做,任何建议或阅读内容的链接将不胜感激。有我可以研究的特定设计模式吗?

你会如何解决这个问题?对规则引擎的一个保留意见是,对于一个简单的问题来说,它们可能太复杂了?


这不是一个是/否的问题,但我可以分享我的经验,希望它有所帮助。 我在一些项目中非常成功地使用了 DROOLS。除了某些情况(另一个团队在重负载下遇到 DROOLS 问题)之外,DROOLS 是一个非常有用的库。

我构建了一个应用程序:
1. 从源读取输入
2. 根据一组可用操作的输入选择下一个操作

尽管看起来很简单,但它需要非常灵活:
1. 输入是一组变量名称-值对,名称不是预先确定的。
2.值,某些名称/值的存在/不存在(基于事件的发生/不存在),触发不同的操作。
3. 业务规则可以在应用程序运行时发生变化。

也许有更好的解决方案,但无论好坏,我最终使用了 DROOLS。我开发了一个 BPEL,其中的决策是由 DROOLS 组件做出的。 DROOLS 组件在内部从 Microsoft Excel 电子表格读取决策规则。如果文件发生更改,它会重建规则。 现在,领域专家会在需要时更改此电子表格,并且我们不会经历痛苦的​​部署!

如果您想要复杂的 UI,DROOLS Guvnor 是一个随时可用的 Web 应用程序(具有丰富的 UI),它将帮助您的领域/主题专家构建规则并将其存储在数据库中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我想我需要一个简单的规则引擎? [关闭] 的相关文章

随机推荐

  • 如何在 Genymotion 虚拟设备上安装 Google 框架(Play、帐户等)? [复制]

    这个问题在这里已经有答案了 我目前正在尝试 Genymotion 天哪 它比 ADT 模拟器快得多 但我需要安装 Google Play 才能下载一些应用程序 我该怎么做呢 2017 年 5 月 28 日更新 据我所知 我不再支持此方法 并
  • MySQL 到 Oracle 语法错误(限制/偏移/更新)

    我有一个适用于我当前的 MySQL 数据库的 MySQL 查询 我被迫转向 Oracle 因此我尝试移植所有存储过程 程序以使用 Oracle SQL 语法 我在一个特定查询上遇到了很多麻烦 这是 MySQL 查询 它使用子查询更新表 up
  • 如何使用 Pandas 从 Excel 读取某些列 - Python

    我正在读取 Excel 工作表 并且想要读取某些列 第 0 列 因为它是行索引 和第 22 37 列 现在这就是我所做的 import pandas as pd import numpy as np file loc path xlsx d
  • 传单通过图层选择添加/删除图例

    我是 Leaflet JavaScript 的新手 并且一直在努力让图例仅在从图层控件中选择特定图层时才显示地图 我有三层 其中一层我希望没有图例 另外两层有相应的图例 我遇到了一个例子 但未能使其工作 Add and remove leg
  • 仅在某些 Android 设备上抛出 java.net.SocketTimeoutException

    我正在尝试从 Android 设备上传 JPEG 图像文件 我正在使用square okhttp用于创建请求的库 我在联想 Yoga 平板电脑上遇到这个问题 当我尝试上传图像时 出现以下异常 但当我在 Samsung Galaxy Tab
  • 更改 TensorBoard 中的图像滑块步骤

    TensorBoard 1 1 0 的图像历史 我想更精确地设置滑块的位置 在带有 7 的黑色图像顶部 以便能够选择任何步骤 现在我只能选择例如在步骤2050或2810之间 这可能吗 也许源代码中的某个位置对 10 常数进行了硬编码 我在那
  • php 邮件功能无法使用

    当我尝试在本地主机上使用 php 邮件功能发送邮件时 出现以下错误 可能是什么问题 我什至尝试更改 php ini 文件并给 smtp 主机值提供我的服务提供商值及其仍在努力工作 警告 mail function mail 无法连接到 lo
  • 使用滑动窗口函数处理向量的 MATLAB 函数,返回向量响应矩阵

    假设向量v尺寸的1 x n和功能fun接受一个长度向量L并返回一个大小向量p x 1 是否有一个 MATLAB 函数可以接受向量v 处理每个长度的滑动窗口L使用函数 fun 并返回大小的矩阵p x n or p x n L 我知道这可以通过
  • 对 JSON 编码的字段使用 MySQL LIKE 运算符

    我一直在尝试使用此查询获取表行 SELECT FROM table WHERE field LIKE u0435 u0442 u043e u0442 字段本身 Field u0435 u0442 u043e u0442 u0442 u043
  • 如何创建具有包结构的jar文件?

    我有一个文件夹结构 com cdy ws a class files com cdy ws b class files com cdy ws c class files 当我运行以下命令 jar cvf asd jar class 时 它会
  • abort() 不是 VS2010 中的 __declspec(noreturn)

    在我的 VS2010 副本中 stdlib h 包含 第 353 355 行 CRTIMP declspec noreturn void cdecl exit In int Code CRTIMP declspec noreturn voi
  • 如何撤消 Angular 2 Cli ng-eject?

    我刚刚执行了ng eject命令 但现在我需要恢复它 并继续使用ng命令 是否可以 我将不胜感激任何帮助 At https github com angular angular cli blob master packages 40angu
  • 如何获取给定字体文件的字体系列的名称?

    我有一组文件名不可预测的字体文件 因此我无法从文件名中推断出真正的 字体系列 名称 因此 我需要读取字体元数据以提取真正的 字体系列 名称 以便渲染此字体文件 我使用的是 C NET 4 0 WinForms 我见过这个功能GetFontI
  • 如何将日期选择器最大日期限制为今天? [复制]

    这个问题在这里已经有答案了 问题就在标题里 我有两个日期选择器 从和到 我想将日期选择器限制为当前日期 我怎么做 提前致谢 使用 maxDate 选项 http jqueryui com demos datepicker option ma
  • 如何处理 Web API 中的可选查询字符串参数

    我正在编写一个 Web API 我希望了解处理可选查询字符串参数的最佳方法是什么 我有一个定义如下的方法 HttpPost public HttpResponseMessage ResetPassword User user var que
  • SQL Server 加权全文搜索

    目前 我有一个表 可以在 4 个字段 名字 姓氏 中间名和别名 上搜索 我目前有一个包含稳定搜索行并且它有效 不太好 但它有效 现在我想让名字的权重更高 中间名的权重更低 我找到了命令ISABOUT但如果我必须通过文字而不是专栏来完成它 那
  • 无法在基于 JHipster 的 Web 应用程序中运行从 Gradle BootRepackage 生成的 war

    我正在尝试与java jar生成的war文件 gradlew Pprod bootRepackage The bootRepackage任务成功结束 当我看着project root build libs 文件夹中 war 和 war or
  • 在 postgresql 中搜索数组中的元素而不使用循环

    我正在编写一个查询来搜索数组中的元素 使用 for 循环搜索效率不高 因为我的数组有很多元素 因此 查询需要花费大量时间来执行 那么任何人都可以说如何在没有 for 循环的情况下搜索数组中的元素 这应该更快 我必须获取搜索索引 谢谢 卡西卡
  • 如何修改内核DTB文件

    Summary 我目前正在为定制板编译 Linux 内核 内核 模块和 DTB 以及一些定制驱动程序 有时 我会编译内核并意识到 DTB 文件中的兼容性字符串不是自定义驱动程序正在寻找的内容 现在 我可以解决此问题的唯一方法是修改 DTS
  • 我想我需要一个简单的规则引擎? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi