يمكن أن تجلب Pub/Sub العديد من الفوائد للمشروع - يمكنها أن تجعل الشيفرة نظيفة وتفصل الخدمات وتجعلها قابلة للتطوير بسهولة. تعرّف على المزيد حول Pub/Sub في المقالة التالية وارفع مستوى مشروعك!
Ruby on Rails (Rails، RoR) هو إطار عمل معروف لتطبيقات الويب مكتوب بلغة روبي لغة البرمجة. حانة/فرعية هو اسم مختصر لأنماط تصميم البرمجيات يسمى نشر-اشتراك-اشتراك. سأشرح كيف يمكن التعامل مع الاتصال بين مكونات البرامج في Rails بواسطة Pub/Sub.
ما هي الحانة/الفرعية؟
حانة/فرعية هو نمط تصميم برمجي يوفر الاتصال من خدمة إلى خدمة. الخدمة
يستلزم أحد الدورين: الناشر (الذي ينتج) أو المتلقي (الذي يستهلك). ما هو
يتم تحديد المنتج المراد استهلاكه كحدث أو رسالة أو إشعار. في
في سياق هذه المقالة، يتم استخدامهما بالتبادل للإشارة إلى نفس الشيء.
الخدمة التي تنتج لا تعرف من يستهلك. الخدمة التي تستهلك لا
معرفة أصل الرسالة. يمكن أن يظلوا مجهولين لبعضهم البعض. وهو يختلف عن
قوائم انتظار الرسائل، حيث غالبًا ما يعرف المكون الذي يرسل الرسالة وجهتها
- يسمح لك هذا النمط من المراسلة بإرسال الرسائل في أي مكان. تعد هذه الآلية من أساسيات
من حانة/فرعية وهذا يعني أنهما منفصلان.
وللتعبير عن مصالحهما المشتركة، يجب أن يكون هناك تفاهم مشترك بينهما. ولذلك,
وكلا الدورين له آلية ضمنية للعصا حيث يقوم منتج الرسالة و
مستهلك الرسالة يلتقي. تسمى هذه الآلية بالموضوع أو الاشتراك أو الموضوع. وهي
مسؤول عن تصنيف الرسائل إلى موضوعات، فهو في الأساس عامل تصفية للرسائل بدون حالة.
تعمل المواضيع كمحطات بث. يقوم الناشر بإنتاج الرسالة إلى الموضوع,
يتلقى المشتركون الرسالة على الفور من الموضوع. بسبب فصل
الخدمات، فإن الطريقة الأكثر فعالية لتبادل الرسائل هي التعامل معها بشكل غير متزامن.
القضبان بدون حانة/فرعية
بشكل افتراضي، لا يوجد في Rails أي نفقات عامة لأنماط تصميم البرامج لتمرير الرسائل بين المكونات. يستخدم المطورون المعيار البرمجة الموجهة للكائنات نموذج (OOP): تمرير المعلمات إلى الدوال، وطلب فئات عن القيم.
عندما يكون التطبيق غير معقد إلى حد ما، قد يكون ذلك كافياً. عندما ينمو التطبيق، على سبيل المثال، يجب أن تتم بعض العمليات بشكل غير متزامن، فإن المشروع يحتاج إلى التجريد الذي يحل سير عمل البيانات هذا. فبدلاً من إعادة اختراع العجلة، يمكن للمطورين تنفيذ حانة/فرعية لسد هذا النقص في التجريد.
مزايا الحانة/فرعية مع القضبان
- تجنب عمليات استدعاء السجل النشط.
- من خلال إضافة المعالجة المتوازية غير المتزامنة إلى النظام، يتم تحسين الأداء والموثوقية وقابلية التوسع.
- يمكن بث الرسائل بشكل غير متزامن إلى أجزاء مختلفة من النظام.
- يسمح ببث الرسائل بشكل غير متزامن إلى أجزاء مختلفة من النظام.
- الفصل - إضافة وظيفة أو تغييرها لن يؤثر على أي شيء لأن Pub/Sub
يسمح لك بتعديل كيفية تفاعل كل شيء.
- لن يحتاج مستهلك الرسالة بعد الآن إلى التحقق بشكل دوري من وجود تحديثات أو جديد
المعلومات. فهو يقلل من وقت استجابة التسليم الذي يمكن أن يكون إشكالية بشكل خاص في الأنظمة
مع عدم التسامح مع التأخير.
- لا يوجد حد لعدد المشتركين الذين يمكن للنظام التعامل معهم لأنه يمكن أن يتغير,
الترقية أو التضاعف أو الاختفاء في أي وقت.
سلبيات الحانة/الفرعية مع القضبان
- يتمثل العيب الرئيسي لأنظمة Pub/sub في فصلها بين الناشر و
المشترك.
تقديم حانة ريلز/فرعية
تمت كتابة أمثلة من المصدر في Rails باستخدام مكتبة
حانة/فرعية على القضبان (في تسمية روبي، تسمى المكتبة جوهرة): ستجد المزيد من التفاصيل في الملف التعريفي للأحجار الكريمة. يتكون التنفيذ من وحدات نمطية:
- المجال,
- الحدث,
- معالج الأحداث,
- ناشر الحدث,
- الاشتراك.
المجال
يصف منطق العمل من أجل توفير سياق لـ 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)
نهاية
النهاية
النهاية
الاشتراك
ترتبط الأحداث بمعالجاتها من خلال الاشتراكات.
الإشعارات:
التقارير_ربح_و_خسارة_تقارير_مُنشأة: غير متزامن
مثال على حالات الاستخدام:
- ميزة "المتابعة" في الشبكات الاجتماعية,
- إنترنت الأشياء,
- البريد
- إشعار حول الملفات التي تم إنشاؤها.
الأنماط المتشابهة
- EventBus - يمكن للمكونات إرسال أحداث إلى EventBus دون معرفة من سيلتقطها أو عدد المستجيبين الذين سيتفاعلون معها,
- مراقب - يحتفظ الموضوع بقائمة من التابعين الذين يُطلق عليهم اسم المراقبين، ويُعلمهم كلما تغيرت حالتهم,
- التجميع - عند الاستطلاع، يسأل العملاء النظام بشكل دوري عما إذا كان هناك أي أحداث أو بيانات جديدة.
الأحجار الكريمة
الملخص
Pub / sub ليس نهجًا شائعًا في Ruby in Rails. كما تم تقديمه في المقالة، يمكن لهذا النمط أن يجلب العديد من الفوائد للمشروع - يمكن أن يجعل الشيفرة نظيفة ويفصل الخدمات ويجعلها قابلة للتطوير بسهولة.