(الدالة(w,d,s,l,i) {w[l]=w[l]||[l]؛ w[l].push({'gtm.start': Date().getTime()، الحدث:'gtm.js'})؛ var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'؟'&l='+l:''؛ j.async=true;j.src='j.src 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); }))) (نافذة، مستند،'البرنامج النصي'،'dataLayer'،'GTM-5LHNRP9'); thecodest، المؤلف في The Codest - صفحة 7 من 9

روبي على القضبان (القضبان, رور) هو الويب إطار عمل التطبيق المكتوب بلغة روبي لغة البرمجة. حانة/فرعية هو اسم مختصر لأنماط تصميم البرمجيات يسمى نشر-اشتراك-اشتراك. سأشرح كيف يمكن التعامل مع الاتصال بين مكونات البرامج في Rails بواسطة Pub/Sub.

ما هي الحانة/الفرعية؟

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

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

القضبان بدون حانة/فرعية

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

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

مزايا الحانة/فرعية مع القضبان

سلبيات الحانة/الفرعية مع القضبان

تقديم حانة ريلز/فرعية

تمت كتابة أمثلة من المصدر في Rails باستخدام مكتبة
حانة/فرعية على القضبان (في تسمية روبي، تسمى المكتبة جوهرة): ستجد المزيد من التفاصيل في الملف التعريفي للأحجار الكريمة. يتكون التنفيذ من وحدات نمطية:

  1. المجال,
  2. الحدث,
  3. معالج الأحداث,
  4. ناشر الحدث,
  5. الاشتراك.

المجال

يصف منطق العمل من أجل توفير سياق لـ Pub/Sub، وبالتالي جعل الكود.

 الوحدة النمطية الإشعارات
   تمديد PubSub::المجال
 نهاية
 تقارير الوحدة النمطية
   تمديد PubSub::المجال
 نهاية

الحدث

إنها فئة تصف ما حدث. أعلن عن اسم الفئة على أنه وصف ذاتي لما حدث قدر الإمكان، على سبيل المثال: ألغيت، تغيرت، تم إنشاؤها، تم تدميرها، تم إرسالها، تم تحديثها. يمكن أن تبدو أسماء الأحداث مثل ProfitAndLossStatementCreatedEvent، وهو ما يعني أنه تم إنشاء بيان مالي.

 صنف التقارير:::بيان الربح والخسارة تم إنشاؤه حدث < PubSub::DomainEvent
   السمة:profit_and_loss_statement_id، أنواع::صارم::عدد صحيح
 نهاية

ناشر الحدث

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

صنف التقارير:::خدمة بيان الأرباح والخسائر
   تضمين PubSub::Emit
    تعريف تنفيذ
     emit(:report_ring_and_loss_statement_statement_created, profit_and_loss_statement_statement_id: id) إذا كانت النتيجة.ok؟
   نهاية
 نهاية

معالج الأحداث

يجب تنفيذ هذه الفئة استجابةً للتعامل مع حدث ما.

وحدة الإشعارات
 صنف ReportsProfitAndLossAndLossStatementCreatedHandler < PubSub:::DomainEventEnventHandler
   تعريف الاستدعاء
     ReportMailer.profit_and_loss_statement(بيان الربح والخسارة).deliver_now
   إنهاء

   خاص

   تعريف بيان_الربح_الخسارة_الربح_الخسارة
     ProfitAndLossStatement.find(event_data.profit_and_loss_statement_statement_id)
   نهاية
 النهاية
النهاية

الاشتراك

ترتبط الأحداث بمعالجاتها من خلال الاشتراكات.

الإشعارات:
 التقارير_ربح_و_خسارة_تقارير_مُنشأة: غير متزامن

مثال على حالات الاستخدام:

الأنماط المتشابهة

  1. EventBus - يمكن أن ترسل المكونات أحداثًا إلى EventBus دون معرفة من سيلتقطها أو عدد المستجيبين تفاعل,
  2. مراقب - يحتفظ الموضوع بقائمة من التابعين الذين يُطلق عليهم اسم المراقبين، ويُعلمهم كلما تغيرت حالتهم,
  3. التجميع - عند الاستطلاع، يسأل العملاء النظام بشكل دوري عما إذا كان هناك أي أحداث أو بيانات جديدة.

الأحجار الكريمة

الملخص

Pub / sub ليس نهجًا شائعًا في Ruby in Rails. كما تم تقديمه في المقالة، يمكن لهذا النمط أن يجلب العديد من الفوائد للمشروع - يمكن أن يجعل الشيفرة نظيفة ويفصل الخدمات ويجعلها قابلة للتطوير بسهولة.

راية التعاون
arArabic