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