بناء قواعد العمل محركات مع سال لعابه - القوة للشركات الصغيرة والمتوسطة

نشرت: 2022-03-11

من أكثر الأشياء المدهشة في العمل في تطوير البرمجيات القدرة على العمل في العديد من الصناعات المختلفة - خاصة إذا كنت مستشارًا. يمكن نقل معظم مهارات تطوير البرامج التي تتعلمها أثناء العمل في صناعة واحدة بشكل مباشر إلى أي عدد من الصناعات والشركات والمشاريع والمنافذ الأخرى.

إنني أتحدث عن موضوعات مثل تصميم قاعدة البيانات وأنماط التصميم وتخطيطات واجهة المستخدم الرسومية وإدارة الأحداث وما إلى ذلك. ثم ، بالطبع ، هناك موضوعات خاصة بصناعة أو شركة أو مشروع معين.

الشركات الصغيرة والمتوسطة تلتقي بتكنولوجيا المعلومات ، ويبدأ نقل المعرفة

هذا هو المكان الذي يأتي فيه خبير الموضوع (SME). ستشارك الشركات الصغيرة والمتوسطة عادة بشكل كبير في مرحلة تصميم المشروع.

تعمل الشركات الصغيرة والمتوسطة في الصناعة لفترة طويلة من الزمن ، وتعرف المصطلحات اللغوية ، وتتفهم منطق العمل وراء الترميز. قد يكون لدى الشركات الصغيرة والمتوسطة بعض الفهم لتطوير البرمجيات ، ولكن هذا ليس ضروريًا لنجاح المشروع.

بالنسبة للعديد من المشاريع ، سيكون إكمال تطبيق برمجي ناجح أمرًا صعبًا نسبيًا ، ما لم يكن لدى مطور البرامج فهم كبير لمنطق الأعمال. سيختلف مقدار الوقت الذي يجب أن يتم إنفاقه في نقل المعرفة على نطاق واسع بناءً على مدى تعقيد المشروع.

بافتراض اتباع نهج رشيق وتوفر واحدة أو أكثر من الشركات الصغيرة والمتوسطة طوال مرحلة تطوير المشروع ، سيستمر نقل المعرفة خلال جميع مراحل المشروع.

ماذا لو كان نقل المعرفة الكامل غير ممكن؟

اعتمادًا على الصناعة والمشروع ، قد لا يكون من الممكن للشركات الصغيرة والمتوسطة أن تقدم نقلًا كاملاً للمعرفة.

على سبيل المثال ، تخيل ما إذا كانت الشركة الصغيرة والمتوسطة طبيبًا يتمتع بخبرة 25 عامًا ، ولديك 6 أشهر لإكمال المشروع. أو تخيل الشركات الصغيرة والمتوسطة كعالم أحياء يتمتع بخبرة 40 عامًا - لا يمكن نقل هذا المستوى من المعرفة في إطار زمني واقعي لمشاريع تطوير البرمجيات.

ولكن ماذا لو كان مجال المعرفة ديناميكيًا؟

عادةً ما يتم إصدار البرنامج وفقًا لجدول زمني محدد بناءً على الوقت أو الميزات. ومع ذلك ، تتغير قواعد العمل في بعض الصناعات بشكل متكرر.

في كثير من الحالات ، قد لا يكون من المجدي إطلاق البرامج كلما كان ذلك ضروريًا لمواكبة التغييرات في الصناعة. قد يكون امتلاك القدرة على إضفاء الطابع الخارجي على قواعد العمل ضمن محرك قواعد العمل أمرًا منطقيًا في مثل هذه السيناريوهات. إن قدرة مشروع البرمجيات على تحمل التغيير ستقطع شوطًا طويلاً نحو ضمان نجاحه النهائي على المدى الطويل.

متى وأين تكون محركات القواعد منطقية؟

بالنسبة للعديد من مشاريع البرامج ، من الممكن أن يتم نقل المعرفة بالكامل ، وأن يتم ترميز منطق الأعمال بلغة كمبيوتر مثل C # أو Java.

ومع ذلك ، هناك مجموعة فرعية من المشاريع حيث يكون مقدار فهم موضوع معين كبيرًا جدًا ، أو تخضع قواعد العمل لتغييرات كبيرة بحيث يكون من المنطقي أكثر لغير المبرمجين الوصول المباشر إلى منطق الأعمال. هذا هو موضوع هذا البرنامج التعليمي ؛ مع وضع ذلك في الاعتبار ، دعونا نناقش محركات القواعد بعمق.

ما هو محرك قواعد العمل؟

محرك القواعد هو أداة لتنفيذ قواعد العمل. تتكون قواعد العمل من الحقائق والبيانات الشرطية. أي عبارة "if-then" التي تظهر في منطق الأعمال التقليدي تعتبر قاعدة عمل.

محركات قواعد العمل

على سبيل المثال: إذا كان الموظف مريضًا لأكثر من 5 أيام متتالية ولم يكن لديه مذكرة من الطبيب ، فيجب كتابته. إذا لم يتم الاتصال بشريك العمل لأكثر من 6 أشهر ولم يجروا أي عمليات شراء خلال تلك الفترة ، فقد يكون الوقت قد حان لإرسال بريد إلكتروني ودي إليهم. إذا كان المريض يعاني من ارتفاع في درجة حرارة الجسم ، ومشاكل في الرؤية ، وهناك تاريخ عائلي من الجلوكوما ، فقد يكون الوقت قد حان لطلب تصوير بالرنين المغناطيسي أو اختبارات أخرى.

كيف تكتب الشركات الصغيرة والمتوسطة قواعد العمل؟

بدلاً من توقع تعلم شركة صغيرة ومتوسطة لغة Java أو C # أو لغة برمجة أخرى ، ستنشئ تقنية المعلومات لغة مصغرة له أو لها للتعبير عن قواعد العمل الخاصة بهم. تتكون اللبنات الأساسية لهذه القواعد من الحقائق التي يمكن الاستعلام عنها. بعض الأمثلة على الحقائق حسب مجالات الصناعة / الممارسة هي:

  • الموارد البشرية: الراتب ، المنصب ، المدير ، سنوات العمل في الشركة
  • طبي: درجة الحرارة وضغط الدم والأدوية الحالية
  • المالية: سعر السهم الحالي ، أعلى / أدنى سعر خلال 52 أسبوعًا ، نسبة السعر إلى العائد ، تاريخ إصدار الأرباح التالية

بشكل أساسي ، يجب أن تكون المعلومات اللازمة لاتخاذ قرارات العمل متاحة للشركات الصغيرة والمتوسطة بطريقة مبسطة.

كيف تبدو هذه القواعد؟

بالنسبة لبقية البرنامج التعليمي لمحرك القواعد ، سأستخدم Drools ، وهو محرك قواعد مفتوح المصدر قائم على Java ، والذي يمكن العثور عليه في www.drools.org وهو مشروع JBoss. في Drools ، تتم كتابة القواعد كرمز Java ولها الهيكل التالي:

بيانات الاستيراد تذهب هنا:

 rule “Name of rule” when “The if” part of the business logic goes here. then The “then” part of the business logic goes here. end

سال لعابه وذاكرة العمل

يستخدم سال لعابه مفهوم يسمى الذاكرة العاملة.

سيكون رمز التطبيق مسؤولاً عن تحميل الحقائق المناسبة في الذاكرة العاملة حتى تتمكن الشركات الصغيرة والمتوسطة من كتابة القواعد التي تستفسر عن هذه الحقائق. يجب تحميل الحقائق ذات الصلة بمنطق عمل التطبيق فقط في الذاكرة العاملة ، من أجل الحفاظ على تشغيل محرك القواعد بأقصى سرعة.

على سبيل المثال ، إذا كان أحد التطبيقات يحدد ما إذا كان سيوافق على العميل للحصول على قرض ، فإن الحقائق ذات الصلة ستشمل الراتب ودرجات الائتمان والقروض المستحقة. قد تتضمن الحقائق غير ذات الصلة يوم الأسبوع أو الجنس.

تقييم القواعد

بعد أن يتم تحميل الذاكرة العاملة لسيلان اللعاب بالقواعد والحقائق ، يتم تقييم القواعد وفقًا للجزء "ثم" من القاعدة. إذا تم تقييم جزء "then" إلى true ، فسيتم تنفيذ جزء "when" من القاعدة.

عادةً ما يتم تقييم جميع القواعد مرة واحدة ، على الرغم من إمكانية تجميع القواعد معًا وتقييمها على أساس كل مجموعة. يمكن لجزء "إذن" من القاعدة تغيير محتويات الذاكرة العاملة. عند حدوث ذلك ، سيعيد Drools تقييم جميع القواعد لمعرفة ما إذا كانت أي قواعد يتم تقييمها الآن على أنها صحيحة. إذا كان الأمر كذلك ، فسيتم تنفيذ أجزائها "متى".

يمكن أن تكون هذه الطبيعة التكرارية لتقييم القواعد نعمة أو نقمة - لذلك يجب إنشاء القواعد مع وضع هذه البنية في الاعتبار.

جانب "إذا" من قاعدة سال لعابه

في سال لعابه ، يتم تمثيل الحقائق بواسطة الأشياء. يمكن الاستعلام عن وجود أو عدم وجود نوع كائن. بالإضافة إلى ذلك ، يمكن الاستعلام أيضًا عن سمات الكائن.

وفيما يلي بعض الأمثلة على ذلك:

حدد ما إذا كان الموظف يكسب أكثر من 100000.

 Employee(salary > 100000)

تحديد ما إذا كان المريض لديه مستوى الكولسترول أعلى من 200 ويتناول ليبيتور.

 Patient(cholesterol > 200, medications.contains(“lipitor”))

حدد ما إذا كان سعر السهم في حدود 1٪ من أعلى سعر سنوي له.

 Stock(price >= (yearHigh * .99))

الجمع بين الاستعلامات

عند كتابة منطق عمل معقد ، يمكن لقواعد العمل دمج الاستعلامات باستخدام عوامل التشغيل المنطقية AND و OR و NOT والتداخل باستخدام الأقواس.

علي سبيل المثال:

حدد ما إذا كان هناك مدير يكسب أقل من 75000 دولار أو أقل من 100000 دولار.

 Employee(position.Equals(“Manager”),salary<75000) OR Employee(position.Equals(“Directory”),salary<100000)

استخدام أنواع كائنات متعددة

تستند جميع الأمثلة حتى الآن إلى نوع كائن واحد ، مثل الموظف أو المريض. ومع ذلك ، يسمح Drools بأن تستند الاستعلامات إلى أنواع كائنات متعددة.

علي سبيل المثال:

حدد ما إذا كان راتب العميل أعلى من 50000 دولار أمريكي ولم يقدم طلبًا للإفلاس.

 Customer(salary>50000) AND not exists Bankruptcy()

جانب "إذن" من القاعدة

يحدد جانب "إذن" من القاعدة ما سيحدث عندما تكون هناك نتيجة واحدة على الأقل في جزء "متى" من القاعدة.

في Drools ، يمكن كتابة أي شيء يمكن كتابته بلغة Java في جزء "then" من القاعدة. ومع ذلك ، من أجل جعل القواعد أكثر قابلية لإعادة الاستخدام ، فمن الجيد عمومًا عدم وضع أي إدخال / إخراج أو رمز تحكم في التدفق أو رمز تنفيذ عام ضمن قاعدة.

كبديل ، يمكن استخدام الجزء "إذن" من القاعدة لتعديل الذاكرة العاملة. من الممارسات الشائعة إدراج حقيقة في الذاكرة العاملة عندما يتم تقييم القاعدة على أنها صحيحة.

علي سبيل المثال:

 rule “LoanApproved” when Customer(credit>700) && not exist LoanOutstanding() then insert(new LoanApproval()) end

كيف نعرف متى تم تقييم القاعدة على أنها صحيحة؟

بعد إطلاق جميع القواعد ، يحتاج التطبيق إلى معرفة القواعد التي تم تقييمها على أنها صحيحة. إذا أدرجت القواعد كائنات في الذاكرة العاملة عند تقييمها صحيحًا ، فيمكن كتابة التعليمات البرمجية للاستعلام عن الذاكرة العاملة لهذه الكائنات.

في المثال أعلاه ، بعد إطلاق جميع القواعد ، يمكن إجراء استعلام لمعرفة ما إذا كان كائن LoanApproval () موجودًا في الذاكرة العاملة.

 query "GetLoanApproval " $result: LoanApproval() end

كيف يتفاعل محرك قواعد العمل مع أحد التطبيقات؟

تحتوي التطبيقات النموذجية على منطق الأعمال وواجهة المستخدم الرسومية و I / O وتدفق كود التحكم.

على سبيل المثال ، قد يعالج التطبيق طلب مستخدم مثل هذا:

 GUI ? Flow Control ? I/O ? Business Logic ? I/O ? Flow Control ? GUI

يضيف تضمين محرك القواعد بضع خطوات إلى هذه العملية:

 GUI ? Flow Control ? I/O ? Create Rules Engine Session ? Add Facts to Working Memory ? Fire Rules ? Determine which rules have evaluated true ? I/O ? Flow Control ? GUI

كيف تعمل الشركات الصغيرة والمتوسطة مع القواعد؟

إنشاء وتحرير وحذف القواعد

لكي تعمل الشركات الصغيرة والمتوسطة مع القواعد ، فإنها ستحتاج إلى واجهة مستخدم رسومية سهلة الاستخدام. تأتي بعض محركات قواعد العمل مع مثل هذه الواجهة.

على سبيل المثال ، يأتي Drools مع اثنين من واجهات المستخدم الرسومية التي أجدها سهلة الاستخدام. الأول يشبه جدول البيانات ويسمح للشركات الصغيرة والمتوسطة بإنشاء قواعد دون كتابة أي رمز فعلي. تسمح واجهة المستخدم الرسومية الثانية بإنشاء منطق أعمال أكثر تعقيدًا.

بينما يمكن أن تكون كل من هاتين الواجهات الرسومية مفيدة في إدخال شروط بسيطة ، إلا أنها لن تعمل لأن منطق الأعمال يصبح أكثر تعقيدًا. في هذه الحالة ، سيتعين عليك إنشاء واجهة المستخدم الرسومية المخصصة الخاصة بك.

عناصر واجهة المستخدم الرسومية المخصصة للشركات الصغيرة والمتوسطة

لكي تعمل الشركات الصغيرة والمتوسطة بفاعلية ، ضع في اعتبارك إنشاء واجهة مستخدم رسومية مخصصة بالقدرات التالية:

  • مدقق النحو - يمكن لزر "التحقق من بناء الجملة" استدعاء رمز Drools للتحقق من الأخطاء المحتملة وأرقام الأسطر الخاصة بها.
  • السحب / الإفلات - بدلاً من مطالبة شركة صغيرة ومتوسطة الحجم بتذكر الكائنات والسمات المتاحة لها ، ضع في اعتبارك تقديم قائمة اختيار لهم يمكن من خلالها السحب والإفلات.
  • واجهة الويب - ستكون واجهة العميل الرقيقة متاحة للشركات الصغيرة والمتوسطة دون مخاوف بشأن التوزيع. سيكون هذا مفيدًا لأن واجهة المستخدم الرسومية تحتاج إلى ميزات إضافية وصيانة عامة.
  • Rule Tester - امتلاك القدرة على اختبار القواعد الفردية دون التفاعل مع التطبيق بأكمله سيزيد بشكل كبير من إنتاجية الشركات الصغيرة والمتوسطة. اسمح لـ SME GUI بتحديد الحقائق ثم أطلق القواعد الفردية.

أين يجب تخزين القواعد؟

في لعبة سال لعابه توجد طريقتان لتخزين القواعد. يعمل Drools خارج منطقة الجزاء مع القواعد المستندة إلى الملفات التي عادةً ما يكون لها امتداد .drl.

يعمل هذا بشكل جيد عندما يكون عدد القواعد صغيرًا. مع زيادة عدد القواعد ، ستحتاج إلى استخدام قاعدة بيانات. يتطلب تخزين واسترجاع القواعد من قاعدة البيانات مزيدًا من العمل ، ولكن يجب أن يمنحك بنية أكثر قابلية للإدارة.

هذا البرنامج التعليمي لمحرك القواعد قد تطرق فقط إلى جزء صغير جدًا من لغة قواعد Drools. للحصول على وصف كامل يرجى الرجوع إلى الوثائق المرجعية الرسمية.

لا ينبغي اتخاذ قرار استخدام محرك القواعد باستخفاف. في حين أن محرك القواعد سيجعل تطبيقك أكثر قابلية للتوسيع من قبل الشركات الصغيرة والمتوسطة ، إلا أنه سيصبح أكثر تعقيدًا في التطوير والاختبار والنشر. للحصول على اعتبارات إضافية حول هذا الموضوع ، قد ترغب في مراجعة الإرشادات التالية.

يمكننا الآن المضي قدمًا في عرض شيء أكثر إثارة للاهتمام - مثال بسيط من الحياة الواقعية عن Drools أثناء العمل ، في حالة استخدام يجب أن يجدها معظم قراء مدونة Toptal مألوفة.

استخدام سال لعابه في سيناريو واقعي

Toptal ، المزود الرائد لمواهب تطوير البرمجيات عالية المستوى ، يستخدم حاليًا برنامج تتبع المتقدمين لأخذ المتقدمين للوظائف خلال مراحل مختلفة في عملية التوظيف. فيما يلي مخطط انسيابي مرئي مبسط لهذه العملية:

يسيل لعابه

حاليًا ، تم ترميز منطق العمل لتحديد ما إذا كان مقدم الطلب سيستمر في عملية التوظيف في البرنامج. في كل مرة تحتاج الموارد البشرية إلى تغيير منطق الأعمال ، يجب أن يشاركوا في تكنولوجيا المعلومات. يرغبون في امتلاك القدرة على تغيير طريقة تشغيل برامجهم بشكل مباشر.

سيتم تعديل برنامج تتبع مقدم الطلب لتشغيل قواعد الموارد البشرية المقدمة في كل نقطة قرار في عملية التوظيف. سيكون لدى الموارد البشرية كائن "المرشح" الذي سيمثل طالب الوظيفة الذي تم تعديل حالته للتو عن طريق إدخال أولي أو إكمال اختبار عبر الإنترنت أو عدد من العوامل المختلفة. سيحتوي كائن المرشح على حقول لتمثيل الخبرة ودرجات الاختبار ودرجات المقابلة وما إلى ذلك.

يقدم المثال التالي مجموعة مبسطة من القواعد للنظر فيها. لم يتم نشره ، إنه مجرد مثال بسيط يتكون من أربع قواعد مترابطة:

  • تم الإرسال -> اختبار
  • اختبار -> مقابلة
  • مقابلة -> مشروع
  • المشروع -> التوظيف

تم الإرسال -> اختبار

بناءً على احتياجات العميل الحالية ، يرغب قسم الموارد البشرية في كتابة قاعدة تحدد ما إذا كان ينبغي جدولة المرشح للاختبار عبر الإنترنت.

 Rule “Schedule For Testing” when $candidate: Candidate(status=='Submitted',yrsExperience >= 10, skill(name=='Java', yrsExperience>=5) or Skill(name=='C#', yrsExperience>=5)) then $candidate.setStatus('Testing'); end

اختبار -> مقابلة

بعد اجتياز المرشح للاختبار عبر الإنترنت ، يجب تقييم درجاته. يرغب قسم الموارد البشرية في السيطرة على هذه القاعدة أيضًا. اختبارات الامتحان عبر الإنترنت لقدرة المرشح على فهم نظرية تطوير البرمجيات وحل المشكلات وبناء الجملة. يود قسم الموارد البشرية أن يقرر أي مزيج من الدرجات سيمكن المرشح من النظر في مقابلة فنية.

 Rule “Schedule For Interview” when $candidate: Candidate(status=='Testing', testScore(theory>.8 && syntax>.6 && problemSolving>.8); then $candidate.setStatus('Interview'); end

مقابلة -> مشروع

ستختبر المقابلة الفنية قدرة المرشح على التحدث عن تجربته ، والإجابة على أسئلة حل المشكلات ، وستختبر قدرته على التواصل بشكل عام. سيكتب قسم الموارد البشرية القاعدة التي تحدد درجة النجاح في المقابلة الفنية.

 Rule “Schedule For Project” when $candidate: Candidate(status=='Interview', interviewScore(speakExperience>.9 && problemSolving>.8 && communication>.9 ); then $candidate.setStatus('Project'); end

المشروع -> التوظيف

إذا اجتاز المرشح المقابلة الفنية ، فسيتم منحه مشروع برمجة خارج الإنترنت. سيقدمون المشروع وسيتم الحكم عليه من حيث الاكتمال والهندسة المعمارية وواجهة المستخدم الرسومية.

 Rule “Schedule For Hiring” when $candidate: Candidate(status=='Project', projectScore(completeness>.8 && architecture>.9 && gui>.7 ); then $candidate.setStatus('Hiring'); end

كما ترى ، حتى هذا المثال الأساسي يقدم عددًا من الاحتمالات للموارد البشرية ، ويمكنه تبسيط العمليات. حقيقة أن الموارد البشرية يمكن أن تغير القواعد دون الحاجة إلى إشراك تكنولوجيا المعلومات في العملية ستوفر حتماً الوقت وتسريع عملية الفرز.

نظرًا لأنه يمكن تغيير القواعد سريعًا ، سيكون لدى قسم الموارد البشرية أيضًا قدر أكبر من المرونة. على سبيل المثال ، يمكن للموارد البشرية توسيع أو تقييد عملية الاختيار من خلال تعيين معايير مختلفة.

إذا كان هناك عدد كبير جدًا من المرشحين الذين حددوا جميع المربعات الصحيحة ، فيمكن رفع الشريط في دقائق ، وبالتالي تقليل عدد المرشحين. بدلاً من ذلك ، إذا أسفرت العملية عن عدد قليل من المرشحين أو لا يستوفون جميع المتطلبات ، يمكن للموارد البشرية اختيار تقليل أو إسقاط بعض المعايير ، وتحويل تركيزهم إلى مهارات أكثر صلة حتى يستوفي عدد كافٍ من المرشحين المتطلبات.