سؤال

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

سؤالي هو، من خلال تجربتك، هل أدى استخدام الفئات الداخلية الثابتة (أو أيًا كان ما يعادله في لغتك) إلى جعل الكود الخاص بك أكثر قابلية للقراءة/الصيانة أم أن هذا انتهى بك الأمر في EOF؟

كما أنني لست متأكدًا مما إذا كانت هذه مادة ويكي مجتمعية أم لا.

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

المحلول

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

واقتران ضيق سيئة فقط عند شيئين التي لا تنتمي حقا معا لمجرد واحد منهم يحدث لاستدعاء الآخر. لفئات التي تتعاون بشكل وثيق، على سبيل المثال عندما، كما في حالتك، واحد منهم موجود لدعم الآخر، ثم انه دعا "التماسك"، وانها <م> شيء جيد .

نصائح أخرى

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

في بايثون، لدينا مجموعة متنوعة من الهياكل.

  1. الحزم.أنها تحتوي على وحدات.هذه في الأساس أدلة تحتوي على القليل من آلات بايثون.

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

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

والتحذير الوحيد مع استخدام الطبقات الداخلية هو التأكد من أنك لا تكرر نفسك في كل مكان - كما هو الحال في - تأكد، عند تعريف الطبقة الداخلية، وأنت لن تحتاج لاستخدام هذه الوظيفة في أي مكان آخر و، أن هذه الوظيفة يقترن بالضرورة مع الطبقة الخارجية. كنت لا تريد في نهاية المطاف مع مجموعة كاملة من الطبقات الداخلية أن جميع تنفيذ بالضبط طريقة setOrderyByNameDesc() نفسه.

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

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