רשימת מנועי כללים בג'אווה

1. סקירה כללית

במאמר זה נעבור על כמה ממנועי הכללים הפופולאריים ביותר עבור Java.

בתוך יישומים קריטיים למשימה, תהליך שמירת ההיגיון העסקי בתוך קוד המקור יכול להיות מורכב מדי. ניתן להשתמש בכללים עסקיים כדי להקל על הפיתוח והתחזוקה על ידי הפרדת ההיגיון העסקי מקוד המקור.

בעולם ג'אווה, מרבית ספריות מנועי הכללים מיישמות את תקן JSR94 המכונה Java Rule API Engine.

2. ריר

דרולים הוא פתרון לניהול כללים עסקיים (BRMS). דרולים יכולים להשתלב עם jBPM, כלי לניהול תהליכים עסקיים לתקינה של תהליכים, פעילויות אירועים, משימות וכו '.

אם אתה רוצה לקרוא עוד, מבוא לדרולים זמין כאן, יחד עם מאמר על שילוב עם אביב.

3. טבליות OpenL

טבליות OpenL היא מערכת לניהול כללים עסקיים ומנוע חוקים עסקיים המבוסס על טבלאות החלטות של Excel. מכיוון שפורמט הטבלאות שמשמש במסגרת זו מוכר למשתמשים העסקיים, הוא מגשר על הפער בין משתמשים עסקיים למפתחים.

הנה דוגמה פשוטה לאופן שבו המסגרת עובדת באמצעות קובץ אקסל המכיל טבלאות החלטה. ראשית, בואו נייבא את התלות שלה המסתמכות על מודולים org.openl.core ו- org.openl.rules:

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

עכשיו, א מִשׁתַמֵשׁ POJO:

מחלקה ציבורית משתמש {שם פרטי מחרוזת; // גטרים וקובעים}

ואנומה שתייצג את תוצאת הכללים המיושמים:

ברכת שלום ציבורי {// ...}

ה מקרה הכיתה עוטפת את מִשׁתַמֵשׁ אובייקט עם משתנים המובילים לתוצאות:

מקרה מקרה ציבורי {// משתנים להסקת תוצאות // קבלנים וקובעים}

הממשק אני שולט מכיל את הכלל שהוחדר על ידי קובץ ה- Excel:

ממשק ציבורי IRule {void helloUser (מקרה מקרה, תגובת תגובה סופית); }

ה תְגוּבָה class מטפל בהחזרת הכלל שהוחל:

תגובה של מעמד ציבורי {פרטית מחרוזת תוצאה; מפת מפה פרטית = HashMap חדש (); }

המעמד הראשי, שמפעיל את ביצוע הכלל:

מעמד ציבורי ראשי {מופע IRule פרטי; סטטי ציבורי ריק ריק (מחרוזת [] טוען) {כללים עיקריים = ראשי חדשים (); // הגדר את המשתמש ואת המקרה כאן rules.process (aCase); } תהליך בטל ציבורי (מקרה aCase) {EngineFactory engineFactory = RulesEngineFactory חדשים (getClass (). getClassLoader () .getResource ("openltablets / HelloUser.xls"), IRule.class); מופע = engineFactory.newEngineInstance (); instance.helloUser (aCase, תגובה חדשה ()); }}

4. כללים קלים

Easy Rules הוא מנוע כללי Java פשוט המספק מסגרת קלת משקל ומבוססת POJO להגדרת עסקים. זה יכול ליצור חוקים מורכבים מכללים פרימיטיביים על ידי שימוש בתבנית המורכבת.

מסגרת זו, בניגוד למנועי הכללים המסורתיים ביותר, אינה עושה שימוש בקבצי XML או בקבצי שפה ספציפית לתחום כדי להפריד בין כללים ליישום. הוא משתמש בכיתות ושיטות מבוססות ביאורים להזרמת לוגיקה עסקית ליישום.

כללים קלים יכולים להיות שימושיים עבור מפתחים ליצור ולתחזק יישומים עם היגיון עסקי המופרד לחלוטין מהיישום עצמו. מצד שני, כמו מסגרת זו אינה מיישמת את תקן JSR94 ואת ההיגיון העסקי יש לקודד ישירות לקוד ג'אווה.

כאן אנו מספקים דוגמה "שלום, עולם". בואו נייבא את התלות הנדרשת בהתבסס על מודול ה- easy-rules-core:

 org.jeasy easy-rules-core 3.0.0 

לאחר מכן, אנו יוצרים מחלקה המגדירה כלל:

@Rule (name = "Hello World rule", תיאור = "תמיד אמרו שלום עולם") מעמד ציבורי HelloWorldRule {@Condition בוליאני ציבורי כאשר () {return true; } פעולה פעולה בטלנית אז () זורק חריג {System.out.println ("שלום עולם"); }}

לבסוף, אנו יוצרים את המעמד הראשי:

משגר מחלקה ציבורית {public static void main (String ... args) {// create עובדות עובדות עובדות = עובדות חדשות (); // ליצור כללים כללי כללים = כללים חדשים (); rules.register (HelloWorldRule חדש ()); // ליצור מנוע חוקים וכללי אש על עובדות ידועות RulesEngine rulesEngine = new DefaultRulesEngine (); rulesEngine.fire (חוקים, עובדות); }}

5. ספר ספרים

RuleBook היא מסגרת Java הממנפת את Java 8 lambdas ואת דפוס שרשרת האחריות להגדרת כללים באמצעות גישה BDD פשוטה.

כמו רוב מנועי הכללים, RuleBook עושה שימוש במושג "עובדות", שהם נתונים המסופקים לכללים. RuleBook מאפשר לכללים לשנות את מצב העובדות, אשר לאחר מכן ניתן לקרוא ולשנות אותם על ידי כללים בהמשך השרשרת. לכללים שקוראים בנתונים (עובדות) מסוג אחד ולהפיק תוצאה מסוג אחר, יש ל- RuleBook החלטות.

ניתן לשלב את RuleBook עם Spring באמצעות Java DSL.

כאן אנו מספקים דוגמה פשוטה "שלום, עולם" באמצעות RuleBook. בואו נוסיף את התלות שלה שמסתמכת על מודול הליבה של ספר החוקים:

 com.deliveredtechnologies rule-core 0.6.2 

כעת אנו יוצרים את הכלל:

מחלקה ציבורית HelloWorldRule {public RuleBook defineHelloWorldRules () {return RuleBookBuilder .create () .addRule (rule -> rule.withNoSpecifiedFactType () .then (f -> System.out.print ("Hello"))) .addRule (כלל - > rule.withNoSpecifiedFactType () .then (f -> System.out.println ("עולם"))) .build (); }} 

לבסוף, המעמד העיקרי:

סטטי ציבורי ריק ריק (String [] args) {HelloWorldRule ruleBook = HelloWorldRule חדש (); ruleBook .defineHelloWorldRules () .run (FactMap חדש ()); } 

6. מסקנה

במאמר מהיר זה דנו בכמה ספריות ידועות המספקות מנועים להפשטת לוגיקה עסקית.

כמו תמיד, דוגמאות ממאמר זה זמינות במאגר GitHub שלנו.


$config[zx-auto] not found$config[zx-overlay] not found