تجاوز include_* طرق في serializers

مرحباً @david،

سؤال سريع حول التفكير وراء هذا الإهمال

إشعار الإهمال: لا ينبغي استخدام add_to_serializer لتجاوز طرق include_* مباشرةً

السياق: DEV: Improve add_to_serializer include_* options (#21220) · discourse/discourse@26b7f8a · GitHub

أتفهم الرغبة في نقل المستخدمين إلى الوسيط include_condition في الاستخدام القياسي لطريقة add_to_serializer، أي لإضافة طرقهم الخاصة إلى serializers.

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

الطريقة الأساسية: discourse/app/serializers/site_serializer.rb at main · discourse/discourse · GitHub

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

4 إعجابات

نعم، هذا سيكون توصيتي.

لقد قدمنا مؤخرًا نظامًا جديدًا لـ ‘معدلات الإضافات’، وهي نقاط توسعة رخيصة جدًا تشبه DiscourseEvent ولكن تأخذ قيمة إدخال وتعيد قيمة. لذلك في حالتك، يمكنك تقديم طلب سحب أساسي لإضافة استدعاء DiscoursePluginRegistry.apply_modifier في طريقة include_ ذات الصلة، ثم يمكنك استخدام register_modifier في إضافتك لتجاوز القيمة.

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

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

هذا يعني أن مقتطف الشفرة الذي ربطته يحدد حاليًا طريقتين. include_wizard_required؟ و include_include_wizard_required؟ :sweat_smile:

11 إعجابًا

يقول ملف Readme هذا إنه “يعمل كمكدس (أول داخل، أول خارج)”، ولكن هذا طابور. المكدس هو أول داخل، آخر خارج. (لا يمكنني معرفة كيفية نسخ النص حتى على هاتفي).

4 إعجابات

صيد جيد. نعم، المكدس هو LIFO (آخر ما يدخل، أول ما يخرج) والطابور هو FIFO (أول ما يدخل، أول ما يخرج)

الميزات الرئيسية لهذه المعدلات:

  • تعمل في مكدس (أول تسجيل، أول استدعاء)
  • يتم تعطيلها تلقائيًا عند تعطيل المكون الإضافي
  • تمرير النتيجة التراكمية لجميع استدعاءات الكتلة إلى المتصل
إعجاب واحد (1)

إنها أشبه بـ “مكدس وسيط”: سلسلة من الطرق التي يتم تنفيذها بالترتيب، يمر كل منها بنتيجته إلى مدخل الطريقة التالية.

لا أعتقد أن محاولة تطبيق مصطلحات LIFO/FIFO هنا ستنجح: لا شيء يتم إضافته/إزالته من “المكدس” - لا يوجد “خروج”.

4 إعجابات

أوه. إذن ليس هيكل بيانات مكدس.

بدأت في قول شيء عن كيف حصلت على شهادة علوم الكمبيوتر الخاصة بي في عام 1987 ولم أكن أعرف ما تعلمه الناس الآن. :joy:

إعجابَين (2)

هذه هي مشكلتي تقريبًا. لدي فجوة حديثة تقارب 10 سنوات حيث بالكاد اقتربت من جهاز كمبيوتر (بعد أكثر من 25 عامًا من العمل معهم) ويبدو الأمر وكأن هناك قسمًا كبيرًا مفقودًا من قاعدة المعرفة.

3 إعجابات

تم إغلاق هذا الموضوع تلقائيًا بعد 30 يومًا من آخر رد. لم تعد الردود الجديدة مسموح بها.