מדריך Visual Studio Express – יכולות Refactoring
בעת הפיתוח לעיתים אנו מגיעים למצב בו נרצה לשפר את הקוד שכתבנו. לדוגמא, מתודה בעלת מספר שורות רב נרצה לפצל למספר מתודות קטנות וממוקדות יותר. תהליך זה נקרא 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("[email protected]");
msg.Subject = "Hello" + name;
msg.Body = "Congratulations!!!";
// Send email
SmtpClient client = new SmtpClient("smtp.mysite.com");
client.Send(msg);
}
}
לצורך ההדגמה, נשנה את שם המשתנה ל- message. עקבו אחר השלבים הבאים כדי לעשות זאת:
- לחצו עם הכפתור הימני של העכבר על שם המשתנה. בתפריט שנפתח, בחרו ב Refactor ואז לחצו על Rename, כמוצג בתמונה הבאה:
- כעת תפתח חלונית שינוי השם, הנראה כך:
- הזינו את שם המשתנה החדש, לדוגמא message. שימו לב לתיבות הבחירה בחלק התחתון של החלונית:
- Preview reference changes – לאחר לחיצה על OK, תוצג חלונית נוספת בה יופיעו כל השינויים בקוד ששינוי השם גורר.
- Search in comments – יתבצע חיפוש אחר שם המשתנה בהערות והשם החדש יעודכן גם בהן.
- Search in strings – יתבצע חיפוש אחר שם המשתנה בתוך מחרוזות המוגדרות בקוד והשם החדש יעודכן גם בהן.
- לאחר שהזנתם את השם החדש וסימנתם את תיבות הבחירה לפי רצונכם, לחצו על OK. התמונה הבאה מציגה את החלונית לאחר הזנת השם החדש וסימון כל תיבות הבחירה:
- במידה וסימנתם את תיבת הבחירה Preview reference changes, לאחר לחיצה על OK תפתח חלונית נוספת, כמו המוצגת בתמונה הבאה:
בחלונית זו ניתן לראות בחלק העליון את כל השורות בהן יתבצע שינוי. ליד כל שורה קיימת תיבת בחירה – במידה ותסירו את הסימון ממנה, שם המשתנה לא יתעדכן בשורה זו. בחלק התחתון של החלונית ניתן לראות את הקוד לאחר השינויים.
במידה ואתם מרוצים מהשינויים, לחצו על Apply. אם לא, לחצו על Cancel לביטול הפעולה.
- לאחר לחיצה על 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("[email protected]");
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("[email protected]");
msg.Subject = "Hello" + name;
msg.Body = "Congratulations!!!";
// Send email
SmtpClient client = new SmtpClient("smtp.mysite.com");
client.Send(msg);
}
}
נניח כי נרצה להוציא את החלק שמכין את אובייקט ה MailMessage למתודה חדשה. עקבו אחר השלבים הבאים כדי לבצע זאת:
- סמנו את הקוד שברצונכם להוציא למתודה חדשה, בדומה לתמונה הבאה:
- לחצו עם הכפתור הימני של העכבר על האיזור המסומן. בתפריט שנפתח, בחרו ב Refactor ואז לחצו על Extract Method, כמוצג בתמונה הבאה:
- כעת יפתח חלון בו תתנו שם למתודה החדשה. בנוסף, תוצג חתימת המתודה ש Visual Studio זיהה שצריך. הזינו שם, לדוגמא PrepareMessage, ולחצו על OK:
שימו לב ש Visual Studio מזהה אוטומטית את הפרמטרים שהמתודה זקוקה להם וכמו כן את ערך ההחזרה הנכון.
- כעת תיווצר המתודה החדשה והקוד שסימנו קודם ימחק ויוחלף בקריאה למתודה החדשה, כמוצג בקוד הבאה:
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("[email protected]");
msg.Subject = "Hello" + name;
msg.Body = "Congratulations!!!";
return msg;
}
}
תגובות בפייסבוק