كيف لا تكرر نفسك عبر المشاريع و/أو اللغات

StackOverflow https://stackoverflow.com/questions/113696

  •  02-07-2019
  •  | 
  •  

سؤال

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

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

هل كانت مفيدة؟

المحلول

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

ليس من الصعب إنشاء خط DSL - قم بتضمينه في شيء ما (مثل داخل Ruby نظرًا لأنه الشيء "in" الآن، أو لغة أخرى مثل LISP/Haskell...)، أو إنشاء قواعد نحوية من الصفر (استخدم Antlr؟) .يبدو أن المشروع كبير، فهذا المسار يستحق وقتك.

نصائح أخرى

سأقوم بتخزين النموذج في ملف نصي بسيط، واعتمادًا على مشروع معين:

  • تضمينه في المصدر في وقت الإنشاء (المعالجة المسبقة)
  • إذا لم يكن ما ورد أعلاه خيارًا، فتعامل معه كملف تكوين تمت قراءته في وقت التشغيل

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

يمكنك استخدام برنامج نصي أو عملية أو خدمة ويب شائعة لإنشاء أسماء الملفات (حسب الإعداد الخاص بك).

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

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top