Senarai Mesin Peraturan di Jawa

1. Gambaran keseluruhan

Dalam artikel ini, kita akan membahas beberapa enjin peraturan yang paling popular untuk Java.

Dalam aplikasi yang penting, proses menjaga logik perniagaan dalam kod sumber boleh menjadi terlalu rumit. Peraturan perniagaan dapat digunakan untuk mempermudah pengembangan dan pemeliharaan dengan memisahkan logik perniagaan dari kod sumber.

Di dunia Java, sebagian besar aturan aturan perpustakaan menerapkan standar JSR94 yang dikenal sebagai Java Rule API Engine.

2. Drools

Drools adalah penyelesaian Sistem Pengurusan Peraturan Perniagaan (BRMS). Drools dapat disatukan dengan jBPM, alat Pengurusan Proses Perniagaan untuk penyeragaman proses, aktiviti acara, tugas, dll.

Sekiranya anda ingin membaca lebih lanjut, pengenalan mengenai Drools terdapat di sini, bersama dengan artikel mengenai integrasi dengan Spring.

3. Tablet OpenL

OpenL Tablets adalah sistem pengurusan peraturan perniagaan dan mesin peraturan perniagaan berdasarkan jadual keputusan Excel. Oleh kerana format jadual yang digunakan oleh kerangka ini tidak asing bagi pengguna perniagaan, ini dapat merapatkan jurang antara pengguna perniagaan dan pemaju.

Berikut adalah contoh mudah bagaimana kerangka kerja berfungsi dengan menggunakan fail Excel yang mengandungi jadual keputusan. Pertama, mari kita import kebergantungannya yang bergantung pada modul org.openl.core dan org.openl.rules:

 org.openl org.openl.core 5.19.4   org.openl.rules org.openl.rules 5.19.4 

Sekarang, POJO Pengguna :

public class User { private String name; // getters and setters }

Dan enum yang akan mewakili hasil peraturan yang digunakan:

public enum Greeting { // ... }

The Case kelas membalut Pengguna objek dengan pembolehubah yang membawa kepada hasil:

public class Case { // Variables to infer outcomes // getters and setters }

Antara muka IRule mengandungi peraturan yang disuntikkan oleh fail Excel:

public interface IRule { void helloUser(Case aCase, final Response response); }

The Response kelas mengendalikan kepulangan peraturan digunakan:

public class Response { private String result; private Map map = new HashMap(); }

Kelas utama, yang mencetuskan pelaksanaan peraturan:

public class Main { private IRule instance; public static void main(String[] args) { Main rules = new Main(); // setup user and case here rules.process(aCase); } public void process(Case aCase) { EngineFactory engineFactory = new RulesEngineFactory( getClass().getClassLoader() .getResource("openltablets/HelloUser.xls"), IRule.class); instance = engineFactory.newEngineInstance(); instance.helloUser(aCase, new Response()); } }

4. Peraturan Mudah

Easy Rules adalah mesin peraturan Java yang sederhana yang menyediakan rangka kerja ringan dan berasaskan POJO untuk menentukan perniagaan. Ia dapat membuat peraturan yang kompleks dari yang primitif dengan menggunakan corak komposit.

Rangka kerja ini, berbeza dengan mesin aturan yang paling tradisional, tidak menggunakan fail XML atau fail Bahasa Spesifik Domain untuk memisahkan peraturan dari aplikasi. Ia menggunakan kelas dan kaedah berasaskan anotasi untuk memasukkan logik perniagaan ke dalam aplikasi.

Peraturan Mudah boleh berguna bagi pembangun untuk membuat dan mengekalkan aplikasi dengan logik perniagaan yang sepenuhnya terpisah dari aplikasi itu sendiri. Sebaliknya, kerana kerangka ini tidak menerapkan standard JSR94 dan logik perniagaan harus dikodkan terus ke kod Java.

Di sini kami memberikan contoh "Hello, world". Mari import kebergantungan yang diperlukan berdasarkan modul inti-peraturan-mudah:

 org.jeasy easy-rules-core 3.0.0 

Seterusnya, kami membuat kelas yang menentukan peraturan:

@Rule(name = "Hello World rule", description = "Always say hello world") public class HelloWorldRule { @Condition public boolean when() { return true; } @Action public void then() throws Exception { System.out.println("hello world"); } }

Akhirnya, kami membuat kelas utama:

public class Launcher { public static void main(String... args) { // create facts Facts facts = new Facts(); // create rules Rules rules = new Rules(); rules.register(new HelloWorldRule()); // create a rules engine and fire rules on known facts RulesEngine rulesEngine = new DefaultRulesEngine(); rulesEngine.fire(rules, facts); } }

5. Buku Peraturan

RuleBook adalah kerangka Java yang memanfaatkan Java 8 lambdas dan Pola Rantai Tanggungjawab untuk menentukan peraturan menggunakan pendekatan BDD yang mudah.

Seperti kebanyakan enjin peraturan, RuleBook menggunakan konsep " Fakta ", yang merupakan data yang diberikan kepada peraturan. RuleBook membenarkan peraturan untuk mengubah keadaan fakta, yang kemudian dapat dibaca dan diubah dengan peraturan yang lebih jauh. Untuk peraturan yang membaca dalam data ( Fakta ) satu jenis dan menghasilkan hasil dari jenis yang berbeza, RuleBook mempunyai Keputusan .

RuleBook dapat diintegrasikan dengan Spring menggunakan Java DSL.

Di sini, kami memberikan contoh ringkas "Hello, world" menggunakan RuleBook. Mari tambahkan kebergantungannya yang bergantung pada modul inti buku peraturan:

 com.deliveredtechnologies rulebook-core 0.6.2 

Sekarang, kami membuat peraturan:

public class HelloWorldRule { public RuleBook defineHelloWorldRules() { return RuleBookBuilder .create() .addRule(rule -> rule.withNoSpecifiedFactType() .then(f -> System.out.print("Hello "))) .addRule(rule -> rule.withNoSpecifiedFactType() .then(f -> System.out.println("World"))) .build(); } } 

Akhirnya, kelas utama:

public static void main(String[] args) { HelloWorldRule ruleBook = new HelloWorldRule(); ruleBook .defineHelloWorldRules() .run(new FactMap()); } 

6. Kesimpulannya

Dalam artikel ringkas ini, kami telah membincangkan beberapa perpustakaan terkenal yang menyediakan mesin untuk pengambilan logik perniagaan.

Seperti biasa, contoh dari artikel ini terdapat di repositori GitHub kami.