python - models.py الحصول على ضخمة ، ما هي أفضل طريقة لتفتيكه؟




django django-models (2)

التوجيهات من المشرف الخاص بي: "أريد تجنب وضع أي منطق في models.py . من الآن فصاعدًا ، دعنا نستخدم ذلك كدورات فقط للوصول إلى قاعدة البيانات ، والحفاظ على كل المنطق في الطبقات الخارجية التي تستخدم فئات الطرز ، أو التفاف معهم."

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

فهل هناك طريقة بسيطة لاستخدام فقط يشمل؟ في لغة PHP ، أود أن أقترح على المشرف بأن لدينا فقط models.py include () فئات النماذج من أماكن أخرى. من الناحية المفاهيمية ، سيسمح هذا للنماذج بالحصول على كل المنطق الذي نريده ، مع الاحتفاظ بحجم الملف من خلال زيادة عدد الملفات (مما يؤدي إلى مشاكل أقل في التحكم في المراجعة مثل النزاعات ، إلخ).

إذاً ، هل هناك طريقة بسيطة لإزالة فئات النماذج من ملف models.py ، ولكن لا تزال تعمل النماذج مع جميع أدوات Django؟ أو هل هناك حل مختلف تمامًا ولكنه أنيق للمشكلة العامة لملف models.py "كبير"؟ سيكون موضع تقدير أي مساهمة.


تم تصميم Django ليتيح لك إنشاء العديد من التطبيقات الصغيرة بدلاً من تطبيق واحد كبير.

داخل كل تطبيق كبير العديد من التطبيقات الصغيرة تكافح من أجل أن تكون حرة.

إذا كانت models.py الخاص بك كبيرًا ، فأنت تفعل الكثير. توقف. الاسترخاء. تتحلل.

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

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

لدينا حوالي 12 تطبيقًا ، لا يتجاوز كل model.py أكثر من 400 سطر من الشفرات. انهم جميعا يركزون بشكل جميل على أقل من نصف دزينة من التعريفات الطبقية المنفصلة. (هذه ليست حدودا قاسية ، فهي ملاحظات حول الكود الخاص بنا.)

نحن تتحلل في وقت مبكر وغالبا.


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

  • نماذج متعددة في نفس الملف

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

  • وظائف المنطق / المنفعة الدخيلة في models.py

    ضع المنطق الاضافي في ملفات منفصلة.

  • أساليب ثابتة لاختيار بعض الأمثلة النموذجية من قاعدة البيانات

    قم بإنشاء Manager جديد في ملف منفصل.

  • أساليب تتعلق بشكل واضح للنموذج

    حفظ ، __unicode__ و get_absolute_url هي أمثلة.







models