بخش های اصلی

آموزش Drools

نوشتن rule ها (قوانین) در Drools

اگه ruleهای (قوانین) پیش فرضی که در پروژه ی Hello World نوشته شده را می بینین (Sample.drl)، تعداد زیادی کلمات کلیدی در آن استفاده شده که آن ها را در این بخش توضیح میدیم.

drools default rule

Sample.drl

  • Package: همه ی ruleها (قوانین) با نام پکیج (package) شروع میشن. پکیج، برای ruleها (قوانین)، مثل فضای نام (namespace) عمل میکنه. نام ruleهای (قوانین) داخل package، باید منحصر به فرد باشه. پکیج ها در ruleها (قوانین)، مثل همان پکیج ها در جاوا هستن.
  • عبارت Import: هر factای (واقعیتی) که بخواین به ruleها (قوانین) اعمال کنین، باید import بشه. برای مثال com.sample.DroolsTest.Message; در مثال بالا import شده.
  • تعریف ruleها (قوانین): تعریف ruleها (قوانین)، تشکیل شده از نام rule (قانون)، شرط و نتیجه. Rule، when، then و end، کلمات کلیدیِ Drools هستن. در مثال بالا، “Hello World” و “GoodBye”، نام های rule (قانون) هستن، قسمت when، شرط، در هر دو rule (قانون) است و قسمت then، نتیجه ست. در اصطلاح rule (قانون)، به بخشِ when، LHS (سمت چپ) rule (قانون)، و به بخش then، RHS (سمت راست) rule (قانون) میگن.

حالا بیاید اصطلاحاتی که در فایل جاوا برای بارگزاریِ Drools و اجزای ruleها (قوانین) استفاده میشه را بررسی کنیم.

Knowledge Base (مبتنی بر دانش)

knowledge base (مبتنی بر دانش)، رابطی هستش که مجموعه ای از ruleها (قوانین)، فرآیندها و نوع های (types) داخلی را مدیریت میکنه و داخل پکیجِ org.drools.KnowledgeBase قرار داره. در Drools، این ها عموماً بعنوان knowledge definition (تعریفات دانش) یا knowledge (دانش) معرفی شده ان knowledge definition (تعریفات دانش)، در پکیج های دانش (knowledge package) گروه بندی میشن. knowledge definition (تعریفات دانش) میتوانند اضافه یا حذف بشن. هدف اصلیِ Knowledge Base (مبتنی بر دانش) ذخیره سازی و استفاده ی دوباره از knowledge (دانش) است، چون ایجاد آن ها پرهزینه ست. Knowledge Base (مبتنی بر دانش)، متدهایی برای ایجاد knowledge sessionها (جلسات دانش) ارائه میده.

Knowledge Sessionها (جلسات دانش)

knowledge sessionها (جلسات دانش) از Knowledge Base (مبتنی بر دانش) بازیابی میشن و اصلی ترین رابط برای برقراری ارتباط با موتور Drools هستن. knowledge sessionها (جلسات دانش) دو نوع هستن:

  • جلسه ی دانش بدون وضعیت (Stateless Knowledge Session)
  • جلسه ی دانش با وضعیت کامل (Stateful Knowledge Session)

جلسه ی دانش بدون وضعیت (Stateless Knowledge Session)

جلسه ی دانش بدون وضعیت (Stateless Knowledge Session) یک جلسه ی بدون وضعیتِه که ساده ترین حالت استفاده را شکل داده، نه استفاده از رابط را. یک جلسه ی بدون وضعیت مثل یک تابع فراخوانی میشه، تعدادی داده به آن پاس داده میشه و نتایجی را برمیگردانه. مثال های رایجِ جلسات بدون وضعیت شامل موارد زیرند:

  • اعتبارسنجی (Validation)
    • آیا این شخص واجد شرایطِ گرفتن وام مسکن هست؟
  • محاسبات (Calculation)
    • محاسبه ی حق بیمه ی وام
  • مسیریابی و فیلترینگ (Routing and Filtering)
    • فیلتر کردن پیام های دریافتی، مثل ایمیل های داخل پوشه ها.
    • فرستادن پیام های دریافتی به یک مقصد خاص.

جلسه ی دانش با وضعیت کامل (Stateful Knowledge Session)

"جلسه های با وضعیت کامل" طول عمر بیش تری دارن و امکان این که تغییرات، در طول زمان تکرار بشن را فراهم می کنن. برخی از موارد مورد استفاده ی رایج در "جلسات با وضعیت کامل" بصورت زیرند:

  • مانیتورینگ (Monitoring)
    • مانتیتورینگِ بازار سهام و تجزیه و تحلیلِ خرید نیمه اتوماتیک.
  • خطایابی (Diagnostics)
    • یافتن خطا، تشخیص پزشکی
  • تدارکات (Logistics)
    • پیگیری بسته و تحویلِ ایمن

Knowledge Builder (سازنده ی دانش)

رابطِ Knowledge Builder (سازنده ی دانش) برای ساخت KnowledgePackage از knowledge definition (تعریفات دانش) قابل استفاده ست (قوانین (rules)، پردازش ها (processes)، انواع (types)) و داخل پکیج org.drools.builder.KnowledgeBuilder قرار داره. knowledge definition (تعریفات دانش) می توانند فرمت های مختلفی داشته باشن. اگر در ساخت آن ها مشکلی وجود داشته باشه، KnowledgeBuilder (سازنده ی دانش)، خطاها را از طریق این دو متد گزارش میده: hasErrors و getError.

نمودار زیر این پروسه را توضیح میده:

knowledge builder

در مثال بالا، از آن جایی که مثالی که زده ایم، مثالی ساده از جلسه ی دانش بدون وضعیت (stateless knowledge session) است، factها (حقایق) را در "جلسه" (session) قرار داده ایم و بعد متد fireAllRules() را فراخوانی کرده ایم و در نهایت می توانید خروجی را ببینین.

در مورد "جلسه دانش با وضعیت کامل" (stateful Knowledge session)، زمانی که ruleها (قوانین)، اجرا بشن، شیءِ "جلسه دانش با وضعیت کامل" (stateful Knowledge session) باید برای آزادسازیِ "جلسه" (session)، و پیشگیری از سرریز شدن حافظه، متد dispose() را فراخوانی کنه.

مبحث آموزشی

آموزش Drools

Learn Drools

پرســیدن سؤال جدید

سؤال های تخصصی خود را از ما بپرسید

تبلیغات

دنبال کردن تلگرام کانال سافت اسکیل

https://telegram.me/softskill_ir

عملیات کاربران

خبـرنــامه

Newsletters

در خبــرنـامه سافت اسکیل عضو شویــد تا جدیدترین هـای سایت را بلافاصله در ایمیل خـود دریافت کنیـد