سؤال

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

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

المحلول

يمكن اعتبار إساءة استخدام الفصول الثابتة ممارسة سيئة. ولكن لذلك يمكن أن تعاطي أي ميزة لغات.

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

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

في الواقع، يمكن أن يكون للاستخدام المسؤول للفئات الثابتة فوائد كبيرة لرمزك:

  • ال Enumerable توفر الطبقة الثابتة مجموعة من طرق التمديد معظمنا قد حبا. إنها مجموعة منطقية من المنطق / المنطق التجاري غير ذي صلة مثيل لأي نوع معين.
  • الخدمات المقدمة من البيئة / السياق: مثل تسجيل الدخول، التكوين (في بعض الأحيان)
  • آخرون (لا أستطيع التفكير في الوقت الحالي :))

لذلك لا، بشكل عام ليست ممارسة سيئة. فقط استخدمها بحكمة ...

نصائح أخرى

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

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

استخدام الفصول الثابتة لعقد المتغيرات العالمية هو مسألة مختلفة - في هذه الحالة القاعدة الأساسية ليست أن "الإحصاء سيئة"، ولكن "Globals سيئة".

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

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

ناه، انها ليست صحيحة حقا.

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

تقريبا جميع اللغات لديها شيء مثل:

y = Math.round(x);

لذلك وظيفة "الجولة" ثابتة. يمكنك، إذا كنت مجنونا، يجادل بشيء مثل (C #):

class RoundFunction<T> : GeneralMathFunction<T>
{
    public override T Operate (params object[] variables) {
        ..
    }
}

ولكن، IMHO، ستكون غريبة بعض الشيء للقيام بذلك.

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

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

كيف تفكر في OO

المفردون

الأساليب الثابتة - هي

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

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

public static class Logging
{
  public static UpdateAction(int id, object data)
  {
     SqlConnection connection = new SqlConnection("conn string from config file");
     // more logic here...
  }
}

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

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

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