Mulai Desember 2020, Easy Rules sedang dalam mode pemeliharaan. Ini berarti hanya perbaikan bug yang akan diatasi mulai sekarang. Versi 4.1.x adalah satu-satunya versi yang didukung. Harap pertimbangkan untuk meningkatkan ke versi ini sesegera mungkin.
Easy Rules adalah mesin aturan Java yang terinspirasi oleh artikel berjudul "Haruskah saya menggunakan Mesin Aturan?" dari Martin Fowler di mana Martin berkata:
Anda dapat membuat sendiri mesin aturan sederhana. Yang Anda butuhkan hanyalah membuat sekumpulan objek dengan kondisi dan tindakan, menyimpannya dalam koleksi, dan menjalankannya untuk mengevaluasi kondisi dan menjalankan tindakan.
Hal inilah yang dilakukan oleh Easy Rules, ia menyediakan abstraksi Rule
untuk membuat aturan dengan kondisi dan tindakan, dan RulesEngine
API yang berjalan melalui serangkaian aturan untuk mengevaluasi kondisi dan mengeksekusi tindakan.
@ 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! " );" );
Seperti pada file contoh weather-rule.yml
berikut:
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 );
}
}
Inilah dunia Aturan Mudah. Anda dapat menemukan contoh lain seperti tutorial Shop, Airco atau WebApp di wiki.
Anda dipersilakan untuk berkontribusi pada proyek dengan permintaan tarik di GitHub. Harap dicatat bahwa Aturan Mudah sedang dalam mode pemeliharaan, yang berarti hanya permintaan penarikan untuk perbaikan bug yang akan dipertimbangkan.
Jika Anda yakin telah menemukan bug atau memiliki pertanyaan, silakan gunakan pelacak masalah.
Terima kasih atas kontribusi Anda!
Terima kasih banyak kepada YourKit, LLC yang telah memberikan lisensi gratis YourKit Java Profiler untuk mendukung pengembangan Aturan Mudah.
Easy Rules dirilis berdasarkan ketentuan lisensi 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.