سؤال

لقد حصلت على بعض التعليمات البرمجية الموروثة التي لديها ميل لتمرير كائنات حولها كواجهات (IFOO ، على سبيل المثال) ، ثم في أماكن تعسفية في الكود ، تلقوا تلقائيًا إلى تطبيقات ملموسة لتلك الواجهات (على سبيل المثال ، myConcreteFoo).

هذا مثال سخيف:

public bool IsThisFooScaredOfMonkeys(IFoo foo)
{
    if (foo is MyConcreteFoo)
    {
        return ((MyConcreteFoo)foo).BelievesMonkeysAreEvil;
    }
    return false;
}

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

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

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

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

المحلول

سيكون هذا لطيفًا جدًا ، لكن NDERPEND يقتصر على مجموعة من الكيانات التي لا تغطي البيانات الفردية.

كيانات NDERPEND

  1. طُرق
  2. مجالات
  3. الأنواع
  4. مساحات الأسماء
  5. التجميعات

على الرغم من هذا القيد ، لا يزال Ndepend رائعًا! ربما هذه هي ميزة الإصدار التالي.

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

في ملحوظة جانبية:

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

هذا النمط سوف يلتقط المثال أعلاه:

if($fooObject$ is $concreteFoo$)
{
    return (($concreteFoo$)$fooObject$).$anyIdentifier$;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top