私は単純な小さなクラスをコーディングしています。私の目標は、従来のVisual Basic 6プロジェクトでそれを実装し、それをCOM相互運用機能を介して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を使用していますwrong - 2番目の引数は_string_で、無効な引数の_name_でなければなりません。代わりに、引数の値を渡しています。 '新しいArgumentExceptionがスロー:あなたが何かを行う必要があります(「無効な送信者アドレスを:」+から、「から」);' –
おかげで多くのパベルが、私はそれを追加しています! –
新しいバージョンのコードはデバッグが難しいでしょう。 IsValidMessage()では、すべての条件を1行でチェックします。デバッガを使用してコードをステップ実行するときに、どのコードが満足できないのかをどのようにして知ることができますか?次のように書くことはできません:if(string.IsNullOrEmpty(subject)){return false; } if(!string.IsNullOrEmpty(body)){戻り値はfalseです。 } Regexオブジェクトを作成して、条件を一度にチェックして、条件が満たされなくなったらすぐにfalseを返します。 – sharptooth