我不是Drools专家.不过,我对它有一些熟悉,通过试验它.我无法理解,为什么我需要它.
我的典型应用是商业Web应用程序.是的,他们确实有一些规则.但这些是使用数据库表,SQL查询和一个很好的用户界面实现的,以便业务用户修改规则.规则不是任意的,它们在投入生产之前都经过仔细考虑.
我的商业用户永远不会使用(Drools)脚本语言来修改任何东西.单独修改规则.他们非常高兴使用UI屏幕来修改规则.另外,如果我让它们靠近它,它们可以在Drools文件中产生无数的语法错误.
再次
- 为什么我应该在这种情况下使用Drools?
- 我见过的Drools狂热分子坚持认为我应该改变我的所有代码以利用Drools.
那么,Drools有用吗?我不确定.
我想知道是否可以编写一个包含多个规则的Makefile,每个规则都定义了自己的先决条件,并在不重复配方的情况下执行所有相同的配方.例:
TARGETS= file1 file2 file3
all: $(TARGETS)
file1: dep1 dep2
file2: dep2 dep3 dep4
file3: dep2 dep1
cat $^ > $@
Run Code Online (Sandbox Code Playgroud)
谢谢!
我们有业务要求让高级用户编辑保险费率和注册规则.我们需要一个web ui,让他们说"这个产品只适用于人们<55,除非他们来自德克萨斯州并拥有一只贵宾犬"或其他什么.编辑澄清:保险是疯了.规则因产品,州与州而异,并且不断变化.
我们查看了几个规则引擎,但商业规则引擎是100K +,开源代码似乎不是,完成了.如果我们提前创建规则,Windows Workflow会起作用,但在运行时构建它们似乎需要绕过代码访问安全性.那太可怕了.
我们难以重新发明这个轮子吗?对.net有更好的选择吗?
上下文是一个相当大的项目,使用 ReactJs 构建,基于 eslint 规则,具有这个 eslint 配置
const DONT_WARN_CI = process.env.NODE_ENV === 'production' ? 0 : 1
module.exports = {
extends: [
'eslint:recommended',
'plugin:jsx-a11y/recommended',
'plugin:react/recommended',
'prettier',
'prettier/@typescript-eslint'
],
plugins: [
'react',
'html',
'json',
'prettier',
'import',
'jsx-a11y',
'jest',
'@typescript-eslint',
'cypress'
],
settings: {
'html/indent': '0',
es6: true,
react: {
version: '16.5'
},
propWrapperFunctions: ['forbidExtraProps'],
'import/resolver': {
node: {
extensions: ['.js', '.jsx', '.json', '.ts', '.tsx']
},
alias: {
extensions: ['.js', '.jsx', '.json']
}
}
},
env: {
browser: true,
node: true,
es6: …Run Code Online (Sandbox Code Playgroud) 在.eslintrc文件中,我们可以使用:
"extends": "eslint:recommended"
Run Code Online (Sandbox Code Playgroud)
扩展eslint提供的推荐规则,并在规则列表中,其中许多被标记为"推荐".
我的问题是什么是它们的确切规则定义?我搜索了eslint的回购,但没找到它.
最近我听说OOP(Java)有9条规则.我只知道四个是抽象,多态,继承和封装.OOP还有更多规则吗?
我需要一些关于解决这个问题的最佳方法的建议.
我研究了DROOLS,Java Rule Engine和其他一些.所有这些都是强大的,并且对它们有好处.我不知道哪个(如果有的话)对我来说是最好的选择.
我有一个业务对象.(简化演示)
Person
firstName:String
lastName:String
departMent:String
hireDate:Date
Run Code Online (Sandbox Code Playgroud)
我需要在Web应用程序中编写一个编辑器,以便围绕这些字段构建复杂的规则.我需要支持复杂的嵌套AND/OR逻辑.我只需要基本的运算符,规则应该简单地评估为真或假.如果规则评估为true或false,则将分别执行一个操作.
例如,
firstName CONTAINS"value"AND(lastName EQUALS"input"OR department CONTAINS"input")
我曾想过,也许我应该编写自己的解析器并在我自己的代码中评估逻辑.我不知道该怎么做,任何建议或链接到阅读的东西将不胜感激.我可以研究一种特定的设计模式吗?
你会如何解决这个问题?关于规则引擎的一个保留意见是,它们可能过于复杂而不仅仅是一个简单的问题?
我在差异分发列表中,如A,B,C
有很多电子邮件BCC到A,B,C
我想设置"将所有邮件密件抄送到特定分发列表到特定文件夹"的规则
似乎没有关于"BCC"的规则,
我正在用Python编写日志收集/分析应用程序,我需要编写一个"规则引擎"来匹配日志消息并对其进行操作.
它需要具备以下功能:
我想象一个示例规则可能是这样的:
(message ~ "program\\[\d+\\]: message" and severity >= high) or (severity >= critical)
Run Code Online (Sandbox Code Playgroud)
我正在考虑使用PyParsing或类似实际解析规则并构造解析树.
我想到的当前(尚未实现的)设计是为每个规则类型创建类,并根据解析树构造和链接它们.然后,每个规则都有一个"匹配"方法,可以使消息对象返回它是否与规则匹配.
很快,像:
class RegexRule(Rule):
def __init__(self, regex):
self.regex = regex
def match(self, message):
return self.regex.match(message.contents)
class SeverityRule(Rule):
def __init__(self, operator, severity):
self.operator = operator
def match(self, message):
if operator == ">=":
return message.severity >= severity
# more conditions here...
class BooleanAndRule(Rule):
def __init__(self, rule1, rule2):
self.rule1 = rule1
self.rule2 = rule2
def match(self, message):
return self.rule1.match(message) and self.rule2.match(message)
Run Code Online (Sandbox Code Playgroud)
然后,这些规则类将根据消息的分析树链接在一起,并在最高规则上调用match()方法,该方法将向下级联,直到评估完所有规则. …
我现在花了2个多小时试图弄清楚如何要求{与方法声明在同一行,而不是默认要求是下一行.我怎么能这样做?我已经将PSR2标准复制到一个名为PSR2的新文件夹,以便根据自己的喜好对其进行修改.所以我正在研究的基础基本上是我想要修改的PSR2标准.
我已经尝试过ruleset.xml,我试图在代码中直接修改它而没有成功.
<rule ref="PEAR.Classes.ClassDeclaration">
<properties>
<property name="eolChar" value="{"/>
</properties>
</rule>
<rule ref="PSR2R.Classes.ClassDeclaration">
<properties>
<property name="eolChar" value="{"/>
</properties>
</rule>
Run Code Online (Sandbox Code Playgroud)
我已经发现这是错的.EOL由phpcs设置.但我无法弄清楚我是否可以通过规则配置一个值.
到目前为止,这对我来说很好用(搞愚蠢的空间!):
<?xml version="1.0"?>
<ruleset name="PSR2R">
<description>PSR2 with tabs instead of spaces.</description>
<arg name="tab-width" value="4"/>
<rule ref="PSR2">
<exclude name="Generic.WhiteSpace.DisallowTabIndent"/>
</rule>
<rule ref="Generic.WhiteSpace.DisallowSpaceIndent"/>
<rule ref="Generic.WhiteSpace.ScopeIndent">
<properties>
<property name="indent" value="4"/>
<property name="tabIndent" value="true"/>
</properties>
</rule>
</ruleset>
Run Code Online (Sandbox Code Playgroud)
但我想补充上面的规则.
rules ×10
drools ×2
eslint ×2
java ×2
rule-engine ×2
bcc ×1
c# ×1
codesniffer ×1
javascript ×1
makefile ×1
oop ×1
outlook ×1
parsing ×1
php ×1
phpcs ×1
python ×1
reactjs ×1
scripting ×1
typescript ×1