标签: rules

复合策略模式 - java - 这段代码有多糟糕?

这个问题是我早期帖子的延续:java中的访问者模式实现 - 这看起来如何?

重构我的代码时我有点困惑.我试图将我的访问者模式(在前一篇文章中解释)转换为复合策略模式.我想做这样的事情:

public interface Rule {
  public List<ValidatonError> check(Validatable validatable);
}
Run Code Online (Sandbox Code Playgroud)

现在,我将定义一个这样的规则:

public class ValidCountryRule  {
  public List<ValidationError> check(Validatable validatable) {
    // invokeDAO and do something, if violation met
    // add to a list of ValidationErrors.
    // return the list.
  }
}
Run Code Online (Sandbox Code Playgroud)

现在,我可以有两个不同类型的对象进行验证.这两个可能是完全不同的:说我有一个商店是Validatable,再一个ScheduleValidatable.现在,如果我写一个看起来像这样的复合:

class Validator implements Rule {
  private List<Rule> tests = new ArrayList<Rule>();

  public void addRule(Rule rule) {
    tests.add(rule);
  }

  public List<ValidationError> check(Visitable visitable) {
    List<ValidationError> list = new ArrayList<ValidationError>(); …
Run Code Online (Sandbox Code Playgroud)

java oop design-patterns rules strategy-pattern

8
推荐指数
2
解决办法
4403
查看次数

超出核心规则引擎

是否有任何以核心运行的生产规则系统的实现?

我已经检查了像CLIPSJess这样的开源实现,但这些只在内存中运行,因此在操作大量事实和规则时(例如,数十亿/数十亿),它们往往会崩溃或强制进行大量磁盘交换.

我正在尝试使用Django的ORM 将一个简单的规则引擎(如Pychinko)移植到SQL后端.但是,支持CLIPS中的功能级别将是非常重要的,我不想重新发明轮子.

是否有任何替代方案可以扩展生产规则系统?

python rule-engine rules machine-learning

8
推荐指数
1
解决办法
794
查看次数

Sonar Java:检查测试类源代码的质量?

是否可以在Sonar中检查*Test.java源代码的质量,例如方法最大大小为100行?

问题是,Java Junit测试随着生产代码和复杂性而增长.

我们有超过1000行和2种方法的单元测试类.

我们想在Sonar中检查这些*Test.java类的一些规则.

java unit-testing rules sonarqube

8
推荐指数
2
解决办法
7973
查看次数

重复的 Windows 防火墙规则(Netsh AdvFirewall 防火墙)

我注意到,当我们通过 来创建防火墙规则时netsh advfirewall firewall,它可以运行多次,从而创建多个相同的防火墙规则。

在尝试创建新规则之前,有没有办法检查防火墙规则是否存在?

windows firewall rules idempotent netsh

8
推荐指数
3
解决办法
6876
查看次数

如何将变量插入到Perl 6正则表达式中?

概要05提到Perl 6不会将变量插入到正则表达式中,但您可以将外部变量与模式相关联.据我所知,文档没有提到这个功能.我认为人们仍然希望以某种方式从字符串中建立一个模式,所以我很好奇这是如何工作的.

这是一个演示现在发生的事情的程序.我不知道这是应该发生的事情还是任何人的意图.我将一个变量插入一个模式.如果你看一下$r.perl,你看变量名.然后,我应用模式并匹配.我改变了变量的值.现在模式不匹配.将其更改为可行的其他内容,并再次匹配:

my $target = 'abcdef';

my $n = 'abc';
my $r = rx/ ( <$n> ) /;

# the smart match like this doesn't return a Match object
# https://rt.perl.org/Ticket/Display.html?id=126969
put 'rx// directly: ',
    $target ~~ $r
        ?? "Matched $0" !! 'Misssed';

# now, change $n. The same $r won't match.
$n = 'xyz';

put 'rx// directly: ',
    $target ~~ $r
        ?? "Matched $0" !! 'Misssed';

# now, change back $n. The same $r …
Run Code Online (Sandbox Code Playgroud)

regex rules perl6

8
推荐指数
1
解决办法
481
查看次数

如何在 ubuntu 中安装最新版本的 prometheus/promtool?

我下载的prometheus版本是2.3.2

wget https://github.com/prometheus/prometheus/releases/download/v2.3.2/prometheus-2.3.2.linux-amd64.tar.gz
Run Code Online (Sandbox Code Playgroud)

untared 和 prometheus 已经作为服务运行。

我想使用 promtool 验证我的 Prometheus 警报管理器规则。从下面的博客创建了一个规则。

https://petargitnik.github.io/blog/2018/01/04/how-to-write-rules-for-prometheus

当我运行 promtool 检查规则 /etc/prometheus/prometheus.rules.yml

它说,没有安装 Promtheus,所以使用 apt get prometheus 再次安装

但这是安装了旧版的 promtool,这里是版本详细信息:

    root@UTVA-kafka-msg-size-2mb-02509:/home/ubuntu# promtool version
prometheus, version 0.16.2+ds (branch: debian/sid, revision: 0.16.2+ds-1ubuntu1)

build user:       pkg-go-maintainers@lists.alioth.debian.org
  build date:       20160408-04:15:29
  go version:       go1.6
Run Code Online (Sandbox Code Playgroud)

Prometheus 版本 2 使用 yml 文件作为规则,较旧的使用一些不同的文件,所以我的 promtool 检查规则失败了。

谁能建议如何升级最新的promtool?

谢谢。

rules grafana prometheus prometheus-alertmanager

8
推荐指数
2
解决办法
5993
查看次数

Laravel 自定义验证规则引用其他请求参数

我正在尝试创建一个接受参数的自定义验证规则,但该参数是请求中另一个字段的名称,就像规则一样required_with

我可以轻松处理规则中给定的参数,但我正在努力找出如何检索其他字段值。

目前我正在创建我的规则类

class MyClassRule
{
    public function validate($attribute, $value, $parameters, $validator) : bool
    {
        // do some stuff here to return true/false
    }
}
Run Code Online (Sandbox Code Playgroud)

并在我的服务提供商中注册

Validator::extend('my_rule', 'path\to\MyClassRule@validate');
Run Code Online (Sandbox Code Playgroud)

所以我可以在我的请求中使用它

public function rules()
{
    return [
        'field' => ['my_rule'],
    ];
}
Run Code Online (Sandbox Code Playgroud)

我想做的是

public function rules()
{
    return [
        'other_field' => [...],
        'field'       => ['my_rule:other_rule'],
    ];
}
Run Code Online (Sandbox Code Playgroud)

并使用other_field我的规则类中的值,但validate()$parameters值只是['other_field']。即包含其他字段名称而不是其值的数组。

我怎样才能做到这一点?

validation rules laravel laravel-validation php-7

8
推荐指数
2
解决办法
2万
查看次数

在数据框中找到一系列规则,并带有中断规则

我展示了我如何看待这个算法的实现,我把它分为两个步骤

第一步序列搜索

在此处输入图片说明

第二步检查中断规则

在此处输入图片说明

set.seed(123)
dat <- as.data.frame(matrix(sample(10,60,replace = T),ncol = 3))
colnames(dat) <- LETTERS[1:ncol(dat)]
dat

rule <- c("A==0","A==10 & B==4","C==9","A>10","B<0","C==0","A==5","A>10",
          "B<0","C==0","A==9 & B==9","A>10","B<0","A==10","A==7 & B==5")
action <- c("break","next","next",rep("break",3),"next",rep("break",3),
            "next",rep("break",3) ,"next")

rule <- cbind(rule,action)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

r rules sequence dataframe

8
推荐指数
1
解决办法
292
查看次数

推理引擎根据内部规则计算匹配集

我有一组带有属性和一系列规则的对象,当应用于对象集时,它们提供了这些对象的子集.为了使这更容易理解,我将提供一个具体的例子.

我的对象是人,每个人都有三个属性:原籍国,性别和年龄组(所有属性都是离散的).我有一堆规则,比如"来自美国的所有男性",它们与这组较大的对象的子集相对应.

我正在寻找现有的Java"推理引擎"或类似的东西,它将能够从规则映射到一部分人,或者建议如何创建我自己的.我已阅读过规则引擎,但该术语似乎专门用于外部化业务规则的专家系统,通常不包括任何高级形式的推理.以下是我必须处理的更复杂场景的一些示例:

  1. 我需要规则的结合.因此,当提出"包括所有男性"和"排除10-20岁年龄组中的所有美国人"时,我只对美国以外的男性以及美国境内10岁以外的男性感兴趣 - 20岁年龄组.

  2. 规则可能有不同的优先级(明确定义).因此,"排除所有男性"的规则将覆盖"包括所有美国男性"的规则.

  3. 规则可能存在冲突.因此,我可以同时拥有"包括所有男性"和"排除所有男性",在这种情况下,优先级必须解决问题.

  4. 规则是对称的.所以"包括所有男性"相当于"排除所有女性".

  5. 规则(或更确切地说子集)可以具有与它们相关联的元规则(明确定义).必须在应用原始规则的任何情况下应用这些元规则,或者如果通过推理到达子集,则必须应用这些元规则.因此,如果"排除美国"的元规则附加到"包括所有男性"的规则,并且我向引擎提供"排除所有女性"的规则,那么它应该能够推断"排除所有女性"子集相当于"包括所有男性"子集,因此另外应用"排除美国"规则.

我很可能没有项目5,但我确实需要提到的所有其他属性.我的规则和对象都存储在数据库中,并且可以在任何阶段更新,因此我需要在需要时实例化"推理引擎"并在之后销毁它.

java logic rule-engine rules inference-engine

7
推荐指数
1
解决办法
2244
查看次数

使用带有附加参数的自定义规则验证 Laravel 中的数组

我正在使用 Laravel 5.7,我需要使用 2 个输入(前缀+数字)来验证电话长度。总位数必须始终为 10。

我正在将此自定义规则用于其他工作正常的项目:

<?php
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;

class PhoneLength implements Rule
{
    public $prefix;

/**
 * Create a new rule instance.
 *
 * @return void
 */
public function __construct($prefix = null)
{
    //
    $this->prefix = $prefix;
}

/**
 * Determine if the validation rule passes.
 *
 * @param  string  $attribute
 * @param  mixed  $value
 * @return bool
 */
public function passes($attribute, $value)
{
    //
    return strlen($this->prefix)+strlen($value) == 10 ? true : false;
}

/**
 * …
Run Code Online (Sandbox Code Playgroud)

arrays validation rules laravel

7
推荐指数
1
解决办法
4139
查看次数