كيفية ريفاكتور: تقسيم الصف إلى اللذين التواصل عبر واجهة

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

سؤال

وأنا مجرد الشروع في أول ريفاكتور على نطاق واسع، وتحتاج إلى تقسيم فئة (كبير للأسف) إلى قسمين، والتي ثم التواصل فقط عن طريق واجهة. (تحولت بلدي مقدم إلى أن تكون وحدة تحكم، ويحتاج لتقسيم المنطق واجهة المستخدم الرسومية من المنطق كونا). باستخدام C # في VisualStudio 2008 وResharper، ما هي أسهل طريقة لتحقيق ذلك؟

وماذا انا ذاهب الى محاولة ل أ) جمع أعضاء للفئة الجديدة و "استخراج فئة جديدة" ب) تنظيف الفوضى الناجمة ج) "استخراج واجهة" د) ملاحقة أي إشارات إلى فئة وتحويلها إلى واجهة المراجع

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

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

المحلول

وخطوات الطفل.

الخطوة 1: إجراء تغيير صغير باستخدام إعادة بيع ديون ممتازة Resharper في
. خطوة 2: اختبار (ويفضل اختبار وحدة) لضمان رمز لا يزال يعمل
الخطوة 3: الالتزام التحكم بالمصادر

وكرر هذه الخطوات 3 مرات عديدة.

وربما هذا لن يعمل إذا كنت تفعل واحدة من تلك refactorings "يجب أن يكون خطوة كبيرة في كل مرة". في هذه الحالة، كما تفعل العديد من refactorings صغيرة ممكن قبل اتخاذ يغرق في خطوة كبيرة.

نصائح أخرى

واتصل بي البالغ من الموضة، ولكن شخصيا، وأنا استخدم وظائف الآلية التي وصفها إلا عندما يكون للمهام الفنية (مثل إعادة تسمية، الخ ...)

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

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

والجواب باختصار هنا أولا، وانا ذاهب لكتابة بلوق وظيفة حول هذا الموضوع، وذلك بفضل لفكرة!

وهكذا، دعنا نفترض لدينا هذا:

class PresenterAndController
  {
    public void Control()
    {
      Present();
    }

    public void Present()
    {
      // present something
    }
  }

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

  internal class Presenter
  {
    public void Present()
    {
      // present something
    }
  }

  class PresenterAndController : Presenter
  {
    public void Control()
    {
      Present();
    }
  }

إنشاء حقل في PresenterAndController التي سيتم تفويض واحد واستخدام توليد (البديل الإضافية) لإنشاء أعضاء تفويض. وسوف يحدث لإخفاء أساليب القاعدة، لأنها هي نفسها:

  internal class Presenter
  {
    public void Present()
    {
      // present something
    }
  }

  class PresenterAndController : Presenter
  {
    private Presenter myPresenter;

    public void Present() // hides base method
    {
      myPresenter.Present();
    }

    public void Control()
    {
      Present(); // it now references method from this type
    }
  }

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

ولقد استعملت أبدا VisualStudio، ولكن أجد إعادة بيع ديون التلقائي في الكسوف أن تكون موثوقة جدا - على الأقل يمكن الاعتماد عليها كما أود أن يكون يؤدون نفس العمل

وقبل أن تفعل، والاستثمار في التحكم بالمصادر: تعلم جيت. إعادة بيع ديون دون SCM مثل القيادة معصوب العينين.

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