سؤال

في طلبي لدي للحفاظ على بعض التطبيقات العالمية الدولة و تطبيق عالمي واسع أساليب مثل المستخدمين المتصلين حاليا إجمالي عدد إجابات إنشاء تطبيق config.... الخهناك اثنين من الخيارات:

  1. جعل منفصلة appstate.py الملف مع المتغيرات العالمية مع وظائف أكثر منهم.يبدو على ما يرام في البداية ولكن يبدو أن أنا في عداد المفقودين شيء في وضوح قانون بلدي.

  2. إنشاء فئة AppState مع فئة وظائف في appstate.py ملف جميع وحدات أخرى تم تعريفها من قبل وظائف محددة.هذا يبدو على ما يرام.ولكن الآن يجب أن أكتب أطول خط مثل appstate.AppState.get_user_list().وعلاوة على ذلك ، فإن أساليب ليست من ذلك بكثير ذات الصلة مع بعضها البعض.يمكنني إنشاء فصول منفصلة ولكن ذلك سيكون أيضا العديد من الفئات.

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

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

المحلول

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

على كل حال لتجنب مشكلة يمكنك دائما:

from myapp.appstate import AppState

وبهذه الطريقة لم يكن لديك لكتابة خط طويل بعد الآن.

نصائح أخرى

يبدو الكلاسيكية اللغز :-).

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

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

أنا لا أعرف إذا كنت قد استخدمت إطار Django, ولكن إذا لم, إلقاء نظرة على وثائق حول كيفية التعامل مع إعدادات.هذه هي التطبيق على نطاق تعريفها في الوحدة ، وهي متاحة على الصعيد العالمي.الطريقة التي يوزع الخيارات وإطلاعهم على الصعيد العالمي هو أنيق جدا ، و قد تجد مثل هذا النهج الملهم لتلبية الاحتياجات الخاصة بك.

النهج الثاني هو إلا اختلافا كبيرا عن النهج الأول إذا كان لديك تطبيق الدولة المخزنة في سبيل المثال من AppState ، وفي هذه الحالة الشكوى لا ينطبق.إذا كنت مجرد تخزين الأشياء في فئة باستخدام ثابت/أساليب الفئة, الفئة لا تختلف عن الوحدة ، سيكون pythonic بدلا من أن يكون عليه الواقع في وحدة نمطية.

لماذا لا تذهب مع مثيل من هذه الفئة ؟ بهذه الطريقة كنت قد تكون قادرة في وقت لاحق على أن يكون 2 مختلفة "جلسات" تشغيل ، اعتمادا على سبيل المثال ما كنت تستخدم.قد جعلها أكثر مرونة.ربما إضافة بعض طريقة get_appstate() إلى وحدة لذلك instanciates الطبقة مرة واحدة.في وقت لاحق إذا كنت قد ترغب في العديد من الحالات يمكنك تغيير هذا الأسلوب في نهاية المطاف معلمة واستخدام بعض القاموس الخ.لتخزين تلك الحالات.

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

أوافق على أن ذلك سيكون أكثر pythonic إلى استخدام وحدة النهج بدلا من classmethods.

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

النظر في هذا المثال:

configuration
|
+-> graphics
|   |
|   +-> 3D
|   |
|   +-> 2D
|
+-> sound

السؤال الحقيقي هو:ما هو الفرق بين فصول و وحدات في هذا التسلسل الهرمي ، كما يمكن أن تكون ممثلة من قبل كل من يعني ؟

فصول تمثل أنواع.إذا قمت بتطبيق الحل مع الطبقات بدلا من وحدات ، كنت قادرا على التحقق من كائن رسومات على انها نوع المناسبة ، ولكن الكتابة العامة الرسومات وظائف.

مع الطبقات يمكنك توليد parametrized القيم.هذا يعني أنه من الممكن تهيئة مختلف يبدو فئة مع منشئ, ولكن من الصعب أن تهيئة وحدة مع معلمات مختلفة.

المهم هو أن كنت حقا شيئا مختلفا عن النمذجة نظر.

وأود أن تذهب مع الطبقات الطريق لأنها سوف تحسين تنظيم التعليمات البرمجية الخاصة بك.تذكر أن القراءة يمكنك أن تفعل هذا:

from appstate import AppSate

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

النهج الثاني هو والمنظمة البحرية الدولية أكثر مرونة في المستقبل.لتجنب أطول خطوط من التعليمات البرمجية ، يمكنك استخدام from appstate import AppState بدلا من مجرد import appstate.

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