اندازهی قلم متن
تخمین مدت زمان مطالعهی مطلب:
یک دقیقه
یکی دیگر از تکنیکهای 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 توکاری است (+) و همچنین یک لیست قابل توجه دیگر را در این زمینه در این پرسش و پاسخ میتوانید بیابید: (+)