Depuis décembre 2020, Easy Rules est en mode maintenance. Cela signifie que seules les corrections de bugs seront désormais résolues. La version 4.1.x est la seule version prise en charge. Veuillez envisager de passer à cette version dès que possible.
Easy Rules est un moteur de règles Java inspiré d'un article intitulé « Dois-je utiliser un moteur de règles ? » de Martin Fowler dans lequel Martin dit :
Vous pouvez créer vous-même un moteur de règles simple. Tout ce dont vous avez besoin est de créer un ensemble d'objets avec des conditions et des actions, de les stocker dans une collection et de les parcourir pour évaluer les conditions et exécuter les actions.
C'est exactement ce que fait Easy Rules : il fournit l'abstraction Rule
pour créer des règles avec des conditions et des actions, ainsi que l'API RulesEngine
qui exécute un ensemble de règles pour évaluer les conditions et exécuter des actions.
@ Rule ( name = "weather rule" , description = "if it rains then take an umbrella" )
public class WeatherRule {
@ Condition
public boolean itRains ( @ Fact ( "rain" ) boolean rain ) {
return rain ;
}
@ Action
public void takeAnUmbrella () {
System . out . println ( "It rains, take an umbrella!" );
}
}
Rule weatherRule = new RuleBuilder ()
. name ( "weather rule" )
. description ( "if it rains then take an umbrella" )
. when ( facts -> facts . get ( "rain" ). equals ( true ))
. then ( facts -> System . out . println ( "It rains, take an umbrella!" ))
. build ();
Rule weatherRule = new MVELRule ()
. name ( "weather rule" )
. description ( "if it rains then take an umbrella" )
. when ( "rain == true" )
. then ( "System.out.println( " It rains, take an umbrella! " );" );
Comme dans l'exemple de fichier weather-rule.yml
suivant :
name : " weather rule "
description : " if it rains then take an umbrella "
condition : " rain == true "
actions :
- " System.out.println( " It rains, take an umbrella! " ); "
MVELRuleFactory ruleFactory = new MVELRuleFactory ( new YamlRuleDefinitionReader ());
Rule weatherRule = ruleFactory . createRule ( new FileReader ( "weather-rule.yml" ));
public class Test {
public static void main ( String [] args ) {
// define facts
Facts facts = new Facts ();
facts . put ( "rain" , true );
// define rules
Rule weatherRule = ...
Rules rules = new Rules ();
rules . register ( weatherRule );
// fire rules on known facts
RulesEngine rulesEngine = new DefaultRulesEngine ();
rulesEngine . fire ( rules , facts );
}
}
C’est le bon monde d’Easy Rules. Vous pouvez trouver d'autres exemples comme les tutoriels Shop, Airco ou WebApp dans le wiki.
Vous êtes invités à contribuer au projet avec des pull request sur GitHub. Veuillez noter qu'Easy Rules est en mode maintenance, ce qui signifie que seules les demandes d'extraction de corrections de bogues seront prises en compte.
Si vous pensez avoir trouvé un bug ou si vous avez des questions, veuillez utiliser l'outil de suivi des problèmes.
Merci à tous pour vos contributions !
Un grand merci à YourKit, LLC pour avoir fourni une licence gratuite de YourKit Java Profiler pour prendre en charge le développement d'Easy Rules.
Easy Rules est publié sous les termes de la licence MIT :
The MIT License (MIT)
Copyright (c) 2021 Mahmoud Ben Hassine ([email protected])
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.