هل يجب علي استخدام السخرية في كود الإنتاج؟

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

  •  06-07-2019
  •  | 
  •  

سؤال

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

لا بد لي من اختيار كتابة فئات فارغة (لتنفيذ الواجهة)، أو استخدام نظام ساخر مثل موك.

لذا فإن السؤال هو، هل تسخر الأنظمة ضرب الأداء, ، أو كسر بعض سهولة القراءة من رمز الإنتاج؟

تحديث
مثال:

interface IRocketSystem
{
   void LaunchTheRocket();
}

class SimulationRocketSystem:IRocketSystem
{
...
}

class RocketSystem:IRocketSystem
{
...
}

لقد وجدت أن لدي فصول SimulationRocketSystem قيد الإنتاج، وهي صغيرة جدًا ولا تحتوي على الكثير في الجسم.يحتوي النظام الوهمي على سطر واحد من التعليمات البرمجية ( نموذج جديد <IRocketSystem>().Object ) لاستبدال فئات مثل هذا.

إيجابيات السخرية:
فئات فارغة أقل في المشروع.

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

المحلول

يبدو وكأنه كائن فارغ.لا أؤمن باستخدام أطر عمل ساخرة لهذا لسببين.

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

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

نصائح أخرى

الكائن الوهمي هو شيء تستخدمه للاختبار، لأنه سيسمح لك بتأكيد أنه تم استدعاؤه بشكل صحيح.يبدو لي أن ما تبحث عنه هو أشبه بكعب روتين أو كائن وكيل.

نظرًا لأنك ستنفذ الفصل المعني في النهاية، فلن يكون من المنطقي أن يكون لديك إطار عمل وهمي للقيام بذلك نيابةً عن المنظمة البحرية الدولية (IMO).لماذا لا تقوم فقط بإنشاء الفصل وتنفيذه حسب الحاجة.

ما العيب في الفصل الفارغ؟

في الواقع، سيتم استبداله بفصل دراسي حقيقي، لذا يمكنك أيضًا البدء بفصل دراسي حقيقي.

أعتقد أن وضع رمز وهمية من أي نوع الخارج الاختبارات هي سياسة سيئة.

أنت تسميها هزلية، ولكن يبدو أن ما تفعله هو مجرد فصل مناسب بين الاهتمامات.

من الجيد استخدام تعدد الأشكال على عبارات if للتحكم فيما يجب أن يحدث.

على سبيل المثال، قل إذا كنت تريد أن يكون تسجيل الدخول اختياريًا.النهج الحتمي هو توفير أ boolean isLogging.ثم في كل مرة تحقق من الأمر المنطقي if (isLogging) { ...logging code... }.

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

إنها ببساطة برمجة جيدة موجهة للكائنات.

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

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

ال حقيقي الحل هو توفير تطبيق وهمي لواجهة موجودة، وتوفير التنفيذ الحقيقي لاحقًا.

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

--يحرر

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

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

نصيحتي - لا تضعه في الإنتاج.لا تضع أبدًا أي شيء في الإنتاج يمكن أن يبطئه أو يكسره أو يتسبب في فقدان وظيفتك :)

ولكن الأهم مما أعتقده هو ما هي سياسة شركتك وما هو رأي مديرك؟يجب ألا تفكر أبدًا في اتخاذ قرار كهذا بنفسك - فهو يسمى CYA.

يجب أن أختار كتابة فصل دراسي فارغ، أو استخدام نظام ساخر مثل موك.

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

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