آشنایی با Refactoring - قسمت 5
اندازه‌ی قلم متن
تخمین مدت زمان مطالعه‌ی مطلب: یک دقیقه


یکی دیگر از تکنیک‌های Refactoring بسیار متداول، «حذف کدهای تکراری» است. کدهای تکراری هم عموما حاصل بی‌حوصلگی یا تنبلی هستند و برنامه نویس نیاز دارد در زمانی کوتاه، حجم قابل توجهی کد تولید کند؛ که نتیجه‌اش مثلا به صورت زیر خواهد شد:

using System;

namespace Refactoring.Day4.RemoveDuplication.Before
{
public class PersonalRecord
{
public DateTime DateArchived { get; private set; }
public bool Archived { get; private set; }

public void ArchiveRecord()
{
Archived = true;
DateArchived = DateTime.Now;
}

public void CloseRecord()
{
Archived = true;
DateArchived = DateTime.Now;
}
}
}

Refactoring ما هم در اینجا عموما به انتقال کدهای تکراری به یک متد مشترک خلاصه می‌شود:

using System;

namespace Refactoring.Day4.RemoveDuplication.After
{
public class PersonalRecord
{
public DateTime DateArchived { get; private set; }
public bool Archived { get; private set; }

public void ArchiveRecord()
{
switchToArchived();
}

public void CloseRecord()
{
switchToArchived();
}

private void switchToArchived()
{
Archived = true;
DateArchived = DateTime.Now;
}
}
}


اهمیت حذف کدهای تکراری:
- اگر باگی در این کدهای تکراری یافت شود، همه را در سراسر برنامه باید اصلاح کنید (زیرا هم اکنون همانند یک ویروس به سراسر برنامه سرایت کرده‌است) و احتمال فراموشی یک قسمت هم ممکن است وجود داشته باشد.
- اگر نیاز به بهبود یا تغییری در این قسمت‌های تکراری وجود داشت، باز هم کار برنامه نویس به شدت زیاد خواهد بود.

ابزارهای کمکی:
واقعیت این است که در قطعه کد کوتاه فوق، یافتن قسمت‌های تکراری بسیار ساده بوده و با یک نگاه قابل تشخیص است؛ اما در برنامه‌های بزرگ خیر. به همین منظور تعداد قابل توجهی برنامه‌ی کمکی جهت تشخیص کدهای تکراری پروژه‌ها تابحال تولید شده‌اند؛ مانند CopyPasteKiller، Clone detective و غیره.

علاوه بر این‌ها نگارش بعدی ویژوال استودیو (نگارش 11) حاوی ابزار Code Clone Detection توکاری است (+) و همچنین یک لیست قابل توجه دیگر را در این زمینه در این پرسش و پاسخ می‌توانید بیابید: (+)

  • #
    ‫۱۰ سال و ۱۱ ماه قبل، دوشنبه ۲۰ آبان ۱۳۹۲، ساعت ۱۳:۴۱
    سلام وخسته نباشید
    آیا نرم افزار   Clone detective     برای نسخه  vs 2012  وجود دارد یا خیر؟
    من نرم افزار فوق را در  vs 2012 نصب کردم ولی تولبار آن نمایش داده نمیشود 
    لطفا راهنمایی کنید 
    مطالب Refactoring بسیار مفید بود
    تشکر
    • #
      ‫۱۰ سال و ۱۱ ماه قبل، دوشنبه ۲۰ آبان ۱۳۹۲، ساعت ۱۳:۵۳
      - این مسایل رو در پشتیبانی خود آن پروژه مطرح کنید.
      - ضمنا (امروز، بعد از 2 سال) نیازی به این افزونه ندارید. خود VS.NET 2012 به صورت توکار حاوی Code Clone Analysis است.