مرحبًا @leighno5
من خبرتي الشخصية، أعتقد أن كتابة إضافات (plugins) بلغة Ruby لتنفيذ ما تفعله في “النسخة المشتقة” (fork) الخاصة بك يكون أسهل بكثير عند استخدام إضافة، وذلك عندما نفهم Ruby و Rails بدرجة كافية لكتابة إضافة لـ Discourse بسهولة (أو تعديل أي فئة في Rails).
إذا لم نفهم Rails و Ruby بدرجة كافية لكتابة إضافة لـ Discourse، فإن تجربتي تقول إن نسخ Discourse وتعديل النواة (core) يعتبر “خاطئًا”.
أعتقد أن التشبيه المناسب هو التالي (آسف على هذه الفكرة البسيطة):
“شخص يجد صعوبة في المشي، فيقرر الجري بدلاً من ذلك.”
دعني أشرح، إذا لم تمانع:
قبل أن أبدأ في كتابة تطبيقات Rails (لا علاقة لها بـ Discourse)، وحاولت كتابة إضافات لـ Discourse، كنت أشعر بالضياع قليلاً؛ بل وحتى كنت منزعجًا من Discourse إلى حد ما، أعتقد. الأمر يشبه عندما تريد ضرب كرة الغولف لأول مرة؛ لا تسير في خط مستقيم وتتطلب الكثير من الجهد لضرب الكرة في منتصف الملعب. نسخ Discource يشبه استخدام عصا القيادة الكبيرة (driver) في منطقة التدريب قبل أن تتقن الضربات القصيرة (chip) والـ putts باستخدام العصا القصيرة!
أخذت استراحة من تعديل Discourse (منذ عدة أشهر) وعملت لفترة في بناء عدد من تطبيقات Rails من الصفر؛ ثم (وفقط بعد ذلك) بدأت أطور بعض “المعرفة الحدسية” حول Rails. بعد ذلك، عندما قررت تعديل Discourse (أقوم حاليًا بتشغيل 6 إضافات مخصصة كتبتها لـ Discourse في بيئة الإنتاج)، أصبحت كل شيء بديهيًا، وأصبحت الإضافات التي تعدل النواة الأساسية لـ Ruby بسيطة للغاية.
Ruby مرنة للغاية. يمكننا تجاوز أي فئة، أي كائن. يمكننا إعادة تعريف كل جانب من جوانب Ruby. مع بعض الخبرة، نبدأ في القول “واو”، لم أكن أعرف أن Ruby بهذه المرونة (والقوة)، ونبدأ في “أن نصبح خطرين” لأننا يمكننا الطيران مثل سوبرمان باستخدام Ruby و Rails. نحن في بداية رحلتنا مع Ruby و Rails في ذلك الوقت، وليس في نهايتها!
مع معرفة Ruby و Rails التي اكتسبتها في عام 2020، ومع ما أعرفه الآن، لن أنسخ Discourse أبدًا وأجري تغييرات على نواة Ruby و Rails كما تقترح، لأن الإضافات سهلة جدًا لتجاوز وتعديل فئات Ruby، عندما نفهم أساسيات فئات Ruby وأساسيات البرمجة الوصفية (meta-programming).
أعتقد أن ما أقوله، آسف على الصراحة، هو أنه إذا اعتقد شخص ما أنه يحتاج إلى تعديل نواة Discourse لإجراء بعض التغييرات البسيطة على Ruby؛ فهذا يعني أنه لا يفهم Ruby و Rails بدرجة كافية؛ لأنه لو فهمهما، لما عدّل النواة وكتب ببساطة إضافة سريعة لتجاوز الفئات واستمتع بـ “الرقص مع القردة” (monkey-patching).
من ناحية أخرى، إذا أردت فعل شيء مجنون وأشعر بالتعاسة مثل استبدال EmberJS في Discourse بـ React و Ant Design، فإن النسخ (fork) سيكون الخيار الوحيد! ومع ذلك، في رأيي، لا يُعرّف “Discourse” بـ “مكتبات الجافاسكريبت”. يُعرّف Discourse بمهارات فريق التطوير الأساسي (الأشخاص) واهتمامهم بالتفاصيل، وخدمة العملاء، ونهج الفريق في تطوير الكود مفتوح المصدر، وخط أنابيب ميزات SPA الخاص بهم، وكل عملهم الشاق! سيكون الأمر جنونيًا قليلاً (في رأيي) إهدار كل هذا العقل فقط لأننا قد نفضل Ant Design (مع React) أو VueJS على Ember.
ينطبق نفس الشيء تمامًا بل وأكثر إذا كنا سنعدل نواة Discourse هنا وهناك! سيكون الأمر “مجنونًا” قليلاً نسخها لفعل ذلك، وإهدار “الأشخاص” الذين يمثلون “الحقيقي” من Discourse (وليس الكود).
أتحدث فقط من رحلتي الشخصية في عام 2020 لتعلم Ruby و Rails. الآن، أصبح الأمر أسهل (الأساسيات) وأنا “خطير”، LOL. يمكنني “الرقص مع القردة مع أي شيء”، وهو ليس دائمًا أمرًا جيدًا؛ وهذا هو دور إضافات Discourse.
حافظ على النواة صلبة كصخرة، واستمتع بـ “الرقص مع القردة” في Discourse باستخدام الإضافات.
أتمنى أن يكون هذا مفيدًا.
ملاحظة: بينما كنت أكتب هذه الإجابة، كتبت أنت:
هذا يثبت نقطي نوعًا ما، أليس كذلك؟
كتابة “إضافة” في Discourse هي كتابة “كود Ruby” (على مستوى واحد)، وبالنسبة للآخرين فإن الأمر أعمق بكثير (في EmberJS).
قبل أن تبدأ في كتابة إضافات لـ Discourse، نصيحتي الودية، التي قد تبدو غير ذات قيمة بالنسبة لك، هي أن تبدأ أولاً في تطوير بعض تطبيقات Ruby on Rails. تعلم طريقك في Ruby و Rails، على الأقل الأساسيات، وبعد ذلك، ستكون قد أجبت على سؤالك أعلاه بنفسك.
أنا كنت في مكالمة هاتفية هذا الصباح مع عميل لمدة ثلاث ساعات نتحدث عن تطبيق Rails، والتحقق من صحة البيانات (validations)، والنماذج (models)، وما إلى ذلك، ثم أخذت استراحة بعد كتابة بعض إجراءات العمل من المكالمة، وقرأت مشاركتك.
أقصر طريق لكتابة إضافات لـ Discourse، في رأيي، هو تعلم Rails أولاً.
أتمنى أن يكون هذا مفيدًا!