Ich kodiere eine einfache kleine Klasse mit einer einzigen Methode eine E-Mail senden. Mein Ziel ist es, es in einem älteren Visual Basic 6-Projekt zu implementieren und es als COM-Objekt über die COM-Interop-Funktion verfügbar zu machen.Ausnahmebehandlung: Wie granular würden Sie bei der Validierung von Argumenten vorgehen?
Es gibt ein Detail, das ich schwierig zu lösen finde, wie granular ich sein sollte, um Parameter zu validieren. An diesem Licht, ich eine Sache bin wirklich nicht glücklich darüber, und das ist kein Detail überhaupt, ist die Art, wie ich bin Ausnahme tatsächlich Handhabung:
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
}
Jeder Vorschlag wird sehr geschätzt werden, so vielen Dank im Voraus für alle Ihre Kommentare!
Hinweis: Wäre es praktisch, Enterprise Library Validation Application Block in diesem speziellen Fall zu implementieren?
Als Randbemerkung, Sie Argument_Exception falsch verwenden - das zweite Argument ist ein _string_, das der _name_ des ungültigen Arguments sein sollte. Stattdessen übergeben Sie den Wert des Arguments dort. Sie sollten etwas tun wie: 'werfen neue ArgumentException (" Ungültige Absenderadresse: "+ von," von ");' –
Vielen Pavel, ich füge es hinzu! –
Die neue Version des Codes wird schwer zu debuggen sein. In IsValidMessage() überprüfen Sie alle Bedingungen in einer Zeile. Wie finden Sie heraus, welcher nicht zufrieden ist, wenn Sie mit einem Debugger über den Code gehen? Sie könnten Folgendes schreiben: if (string.IsNullOrEmpty (subject)) {return false; } if (! string.IsNullOrEmpty (body)) {return false; } dann erstellen Sie ein Regex-Objekt und überprüfen Sie erneut eine Bedingung zu einem Zeitpunkt eine Rückgabe false sofort, sobald die Bedingung nicht erfüllt ist. – sharptooth