كم عدد الفصول التي يجب أن أضعها في ملف واحد؟[مغلق]

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

  •  01-07-2019
  •  | 
  •  

سؤال

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

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

المحلول

يُطلق على ملف Python اسم "الوحدة النمطية" وهي إحدى الطرق لتنظيم برامجك بحيث تكون "منطقية".آخر هو دليل يسمى "حزمة".

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

القاعدة هي: الوحدة هي وحدة إعادة الاستخدام.

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

على سبيل المثال، أنت تعمل على شيء يقرأ جداول البيانات، ويقوم ببعض العمليات الحسابية، ويحمل النتائج في قاعدة البيانات.كيف تريد أن يبدو برنامجك الرئيسي؟

from ssReader import Reader
from theCalcs import ACalc, AnotherCalc
from theDB import Loader

def main( sourceFileName ):
    rdr= Reader( sourceFileName )
    c1= ACalc( options )
    c2= AnotherCalc( options )
    ldr= Loader( parameters )
    for myObj in rdr.readAll():
        c1.thisOp( myObj )
        c2.thatOp( myObj )
        ldr.laod( myObj )

فكر في الاستيراد باعتباره طريقة لتنظيم التعليمات البرمجية الخاصة بك في مفاهيم أو أجزاء.لا يهم بالضبط عدد الفئات الموجودة في كل عملية استيراد.ما يهم هو التنظيم العام الذي تصوره بصورتك import صياغات.

نصائح أخرى

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

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

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

على سبيل المثال، غالبًا ما أستخدم سلسلة من الفئات لتجريد البيانات - لذلك قد يكون لدي 4 أو 5 فئات قد يبلغ طولها سطرًا واحدًا فقط (class SomeData: pass).

سيكون من الغباء تقسيم كل ملف من هذه الملفات إلى ملفات منفصلة - ولكن بما أنه يمكن استخدامها من ملفات مختلفة، فيجب وضع كل هذه الملفات في ملف منفصل data_model.py الملف سيكون له معنى، حتى أتمكن من القيام به from mypackage.data_model import SomeData, SomeSubData

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

يجب عليك هيكلتها حتى تفعل ذلك from mypackage.database.schema import MyModel, ، لا from mypackage.email.errors import MyDatabaseModel - إذا كان المكان الذي تستورد فيه الأشياء منطقيًا، ولم يكن طول الملفات عشرات الآلاف من الأسطر، فقد قمت بتنظيمها بشكل صحيح.

ال وثائق وحدات بايثون يحتوي على بعض المعلومات المفيدة حول تنظيم الحزم.

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

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

من ناحية أخرى، عندما يصل أي ملف .java أو .py إلى أكثر من حوالي 700 سطر، أبدأ بالانزعاج عندما أحاول باستمرار أن أتذكر مكان "هذا الجزء المحدد".

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

فيما يتعلق بالتقسيم إلى حزم، لا أعرف حقًا، لكني أقول ربما نفس قاعدة الإزعاج وظهور البنية السعيدة تعمل على جميع مستويات الوحدات النمطية.

أود أن أقول وضع أكبر عدد ممكن من الفئات التي يمكن تجميعها منطقيًا في هذا الملف دون جعلها كبيرة جدًا ومعقدة.

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