我使用單一方法編寫簡單的小類,發送電子郵件。我的目標是在傳統的Visual Basic 6項目中實現它,通過COM Interop工具將其作爲COM對象公開。異常處理:當涉及到參數驗證時,您將如何精細化?
我發現有一個細節難以解決,那就是我應該在驗證參數時應該如何精細化。在光,我真的不開心,和一個東西是不是一個細節都被我其實異常處理的方式:
public class MyMailerClass
{
#region Creation
public void SendMail(string from, string subject, string to, string body)
{
if (this.IsValidMessage(from, subject, to, body)) // CS1501
{
MailMessage msg = new MailMessage();
msg.IsBodyHtml = true;
msg.From = new MailAddress(from);
msg.To.Add(to);
msg.Subject = subject;
msg.Body = body;
SmtpClient srv = new SmtpClient("SOME-SMTP-HOST.COM");
srv.Send(msg);
}
else
{
throw new ApplicationException("Invalid message format.");
}
}
#endregion Creation
#region Validation
private bool IsValidMessage(string from, string subject, string to, string body)
{
Regex chk = new Regex(@"(\[email protected][a-zA-Z_]+?\.[a-zA-Z]{2,6})");
if (!chk.IsMatch(from))
{
return false;
}
if (!chk.IsMatch(to))
{
return false;
}
if (!string.IsNullOrEmpty(subject))
{
return false;
}
if (!string.IsNullOrEmpty(body))
{
return false;
}
else
{
return true;
}
}
#endregion Validation
}
任何建議將非常感激,所以非常感謝爲您的所有意見!
注意:在這個特殊情況下實現企業圖書館的Validation Application Block會方便嗎?
作爲一個側面說明,你'使用ArgumentException錯誤 - 第二個參數是一個_string_,它應該是無效參數的_name_。相反,你在那裏傳遞參數的價值。你應該這樣做:拋出新的ArgumentException(「無效的發件人地址:」+ from,「from」);` – 2009-07-09 06:11:06
非常感謝Pavel,我添加了它! – 2009-07-09 06:36:54
新版本的代碼將很難調試。在IsValidMessage()中,你檢查一行中的所有條件。如何在調試器中執行代碼時找出哪一個不滿意?你可以這樣寫:if(string.IsNullOrEmpty(subject)){return false; } if(!string.IsNullOrEmpty(body)){return false; }然後創建一個Regex對象,並再次檢查一個條件,一旦條件不滿足,立即返回false。 – sharptooth 2009-07-09 08:13:45