لماذا تحتفظ العديد من التطبيقات/الأطر بملفات التكوين الخاصة بها بتنسيق غير منفذ؟

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

سؤال

تحتفظ العديد من أطر العمل بملفات التكوين الخاصة بها بلغة مختلفة عن بقية البرنامج.على سبيل المثال، يحتفظ Appengine بالتكوين بتنسيق yaml.للمقارنة، DJango settings.py عبارة عن وحدة نمطية بيثون.هناك العديد من العيوب التي يمكنني رؤيتها مع هذا.

إذا كان بنفس لغة بقية البرنامج، أستطيع ذلك

قم بأشياء مثيرة للاهتمام في ملف التكوين.

 MEDIA_DIR = os.path.join(os.path.dir(__file__), 'media')
 #Or whaever the correct cals are, you get the idea.
  • لا يتعين عليك تعلم تنسيق جديد (خفيف الوزن).
  • أدواتي تعمل كما هو متوقع معها.
  • أستطيع أن أفعل فقط import conf إلخ.

أستطيع أن أرى المزايا إذا كانت لغة ثقيلة الوزن مثل C/C++ وما إلى ذلك، ولكن بالنسبة لبيثون، لماذا يكون ذلك منطقيًا.يبدو الأمر وكأنه يسلب السلطة دون إضافة أي فوائد.

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

المحلول

يشعر بعض مصممي إطار العمل أن ملفات التكوين ليست أماكن مناسبة للمنطق الثقيل.مثلما يمنعك إطار عمل MVC من وضع المنطق في مكان لا ينتمي إليه، فإن ملف التكوين يمنعك من وضع البرمجة في مكان لا ينتمي إليه.

إنها مسألة ذوق وفلسفة.

ومع ذلك، أفضّل طريقة جانغو.

نصائح أخرى

قد لا تكون Python دائمًا هي اللغة الوحيدة التي يعمل عليها appengine.لذلك يمكن لملف تكوين yaml نفسه تشغيل تطبيق appengine مكتوبًا بلغة Java أو Perl على سبيل المثال

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

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

سبب آخر لاستخدام بناء جملة مثل YAML هو أنه يمكنك التعامل مع الملف باستخدام أدوات أخرى، حتى لغات أخرى، والتنسيق محمول وموثق بما فيه الكفاية.

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

  • قم بإزالة المرفق { } بحيث لا يتوافق مباشرة مع تعبير بايثون
  • استخدام Safe_eval لتجاهل أي عنصر قابل للتنفيذ.

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

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