וובמאסטר - תיכנות ובניית אתרים

מדריך Visual Studio Express – יכולות Refactoring

ironshay ,‏ CodeValue‏ ‏/‏ 19 פברואר, 2011
F+
F-

בעת הפיתוח לעיתים אנו מגיעים למצב בו נרצה לשפר את הקוד שכתבנו. לדוגמא, מתודה בעלת מספר שורות רב נרצה לפצל למספר מתודות קטנות וממוקדות יותר. תהליך זה נקרא refactoring ו- Visual Studio Express מכיל מספר אפשרויות המקלות עליו.

האפשרויות הכלולות ב Visual Studio Express הן:

  • Rename - שינוי שם של אובייקט בקוד (כמו שם מחלקה, מתודה וכו').
  • Extract Method - הוצאת בלוק של קוד ממתודה אחת אל מתודה חדשה.

Rename

יכולת זאת מאפשרת שינוי שם של אובייקט באופן "בטוח". כלומר, לאחר שינוי השם, יעודכנו לשם החדש כל המקומות בקוד (בפתרון הנוכחי) המשתמשות באובייקט זה.

לדוגמא, בקוד הבא נעשה שימוש במשתנה בשם msg במספר מקומות:

public class EmailService
{
  public void SendCongratulationsEmail(string name, string email)
  {
    // Validate input
    if (String.IsNullOrWhiteSpace(name) || String.IsNullOrWhiteSpace(email))
    {
      throw new Exception("Input cannot be blank");
    }

    // Prepare mail          
    MailMessage msg = new MailMessage();
    msg.To.Add(new MailAddress(email));
    msg.From = new MailAddress("me@mysite.com");
    msg.Subject = "Hello" + name;
    msg.Body = "Congratulations!!!";

    // Send email
    SmtpClient client = new SmtpClient("smtp.mysite.com");
    client.Send(msg);
  }
}

לצורך ההדגמה, נשנה את שם המשתנה ל- message. עקבו אחר השלבים הבאים כדי לעשות זאת:

  1. לחצו עם הכפתור הימני של העכבר על שם המשתנה. בתפריט שנפתח, בחרו ב Refactor ואז לחצו על Rename, כמוצג בתמונה הבאה:
    Visual Studio Express - תפריט Refactor
  2. כעת תפתח חלונית שינוי השם, הנראה כך:
    Visual Studio Express - חלונית שינוי שם משתנה
  3. הזינו את שם המשתנה החדש, לדוגמא message. שימו לב לתיבות הבחירה בחלק התחתון של החלונית:
    • Preview reference changes - לאחר לחיצה על OK, תוצג חלונית נוספת בה יופיעו כל השינויים בקוד ששינוי השם גורר.
    • Search in comments - יתבצע חיפוש אחר שם המשתנה בהערות והשם החדש יעודכן גם בהן.
    • Search in strings - יתבצע חיפוש אחר שם המשתנה בתוך מחרוזות המוגדרות בקוד והשם החדש יעודכן גם בהן.
  4. לאחר שהזנתם את השם החדש וסימנתם את תיבות הבחירה לפי רצונכם, לחצו על OK. התמונה הבאה מציגה את החלונית לאחר הזנת השם החדש וסימון כל תיבות הבחירה:
    Visual Studio Express - חלונית שינוי שם משתנה
  5. במידה וסימנתם את תיבת הבחירה Preview reference changes, לאחר לחיצה על OK תפתח חלונית נוספת, כמו המוצגת בתמונה הבאה:
    Visual Studio Express - חלונית הצגת שינויים
    בחלונית זו ניתן לראות בחלק העליון את כל השורות בהן יתבצע שינוי. ליד כל שורה קיימת תיבת בחירה - במידה ותסירו את הסימון ממנה, שם המשתנה לא יתעדכן בשורה זו. בחלק התחתון של החלונית ניתן לראות את הקוד לאחר השינויים.
    במידה ואתם מרוצים מהשינויים, לחצו על Apply. אם לא, לחצו על Cancel לביטול הפעולה.
  6. לאחר לחיצה על Apply, השינויים יתבצעו ונקבל קוד המשתמש בשם המשנה החדש:
public class EmailService
{
  public void SendCongratulationsEmail(string name, string email)
  {
    // Validate input
    if (String.IsNullOrWhiteSpace(name) || String.IsNullOrWhiteSpace(email))
    {
      throw new Exception("Input cannot be blank");
    }

    // Prepare mail          
    MailMessage message = new MailMessage();
    message.To.Add(new MailAddress(email));
    message.From = new MailAddress("me@mysite.com");
    message.Subject = "Hello" + name;
    message.Body = "Congratulations!!!";

    // Send email
    SmtpClient client = new SmtpClient("smtp.mysite.com");
    client.Send(message);
  }
}

Extract Method

לעיתים אנו מגיעים למצב בו המתודה שאנו עובדים עליה גדלה לעשרות שורות קוד או שאנו מגלים שמספר מקומות בקוד מבצעים את אותן פעולות. במצב כזה נראה להוציא חלק מהקוד למתודות כדי להקטין את הסיבוכיות של הקוד. אם נעשה זאת ידנית נצטרך להעביר את הסמן למקום המיועד, לכתוב את המתודה ואז לחזור לקוד הקיים, למחוק את הקוד שהעברנו לתוך המתודה ולהחליפו בקריאה אליה... הרבה עבודה. Visual Studio ממכן עבורנו את התהליך ומאפשר לבצע את הפעולה בכמה לחיצות עכבר.

גם כאן נדגים בעזרת המתודה SendCongratulationsEmail שהצגנו מקודם:

public class EmailService
{
  public void SendCongratulationsEmail(string name, string email)
  {
    // Validate input
    if (String.IsNullOrWhiteSpace(name) || String.IsNullOrWhiteSpace(email))
    {
      throw new Exception("Input cannot be blank");
    }

    // Prepare mail          
    MailMessage msg = new MailMessage();
    msg.To.Add(new MailAddress(email));
    msg.From = new MailAddress("me@mysite.com");
    msg.Subject = "Hello" + name;
    msg.Body = "Congratulations!!!";

    // Send email
    SmtpClient client = new SmtpClient("smtp.mysite.com");
    client.Send(msg);
  }
}

נניח כי נרצה להוציא את החלק שמכין את אובייקט ה MailMessage למתודה חדשה. עקבו אחר השלבים הבאים כדי לבצע זאת:

  1. סמנו את הקוד שברצונכם להוציא למתודה חדשה, בדומה לתמונה הבאה:
    Visual Studio Express - סימון הקוד המיועד להוצאה למתודה חדשה
  2. לחצו עם הכפתור הימני של העכבר על האיזור המסומן. בתפריט שנפתח, בחרו ב Refactor ואז לחצו על Extract Method, כמוצג בתמונה הבאה:
    Visual Studio Express - תפריט Refactor
  3. כעת יפתח חלון בו תתנו שם למתודה החדשה. בנוסף, תוצג חתימת המתודה ש Visual Studio זיהה שצריך. הזינו שם, לדוגמא PrepareMessage, ולחצו על OK:
    Visual Studio Express - חלונית הוצאה למתודה
    שימו לב ש Visual Studio מזהה אוטומטית את הפרמטרים שהמתודה זקוקה להם וכמו כן את ערך ההחזרה הנכון.
  4. כעת תיווצר המתודה החדשה והקוד שסימנו קודם ימחק ויוחלף בקריאה למתודה החדשה, כמוצג בקוד הבאה:
public class EmailService
{
  public void SendCongratulationsEmail(string name, string email)
  {
    // Validate input
    if (String.IsNullOrWhiteSpace(name) || String.IsNullOrWhiteSpace(email))
    {
      throw new Exception("Input cannot be blank");
    }

    // Prepare mail          
    MailMessage msg = PrepareMessage(name, email);

    // Send email
    SmtpClient client = new SmtpClient("smtp.mysite.com");
    client.Send(msg);
  }

  private static MailMessage PrepareMessage(string name, string email)
  {
    MailMessage msg = new MailMessage();
    msg.To.Add(new MailAddress(email));
    msg.From = new MailAddress("me@mysite.com");
    msg.Subject = "Hello" + name;
    msg.Body = "Congratulations!!!";
    return msg;
  } 
}

ironshay, CodeValue

מייסד בחברת CodeValue. עובד כיועץ ומרצה בתחומים שונים כמו C#, שפות דינמיות ופיתוח אתרי אינטרנט. Microsoft Visual C# MVP. מחבר הספרים IronRuby Unleashed ו- ASP.NET 4 Programmer's Reference.
תגיות: Visual Studio‏  /  פיתוח‏  /  .net‏  /  מדריך‏  

תגובות בפייסבוק

תגובות למאמר



תגיות פופולאריות

X
הצטרף לעמוד שלנו בפייסבוק להישאר מעודכן!
וובמאסטר © כל הזכויות שמורות