Aprroach 1:パラメータの検証、または失敗させますか?
public static void SendMail(string from, string to, string subject, string body)
{
if(String.IsNullOrWhiteSpace(from))
throw new ArgumentNullOrWhiteSpaceException("from");
if(String.IsNullOrWhiteSpace(to))
throw new ArgumentNullOrWhiteSpaceException("to");
var msg = new MailMessage(from, to, subject, body) { IsBodyHtml = true };
using(var smtp = new SmtpClient())
smtp.Send(msg);
}
アプローチ2:
public static void SendMail(string from, string to, string subject, string body)
{
var msg = new MailMessage(from, to, subject, body) { IsBodyHtml = true };
using(var smtp = new SmtpClient())
smtp.Send(msg);
}
なぜ私はアプローチ1のパラメータを検証するだろう、とちょうどスローするようにMailMessage
を待ちません私が空になったことを伝える例外(アプローチ2)from
またはto
の値をコンストラクタに渡しますか?
なぜ私は自分の例外をスローしますか?
あなたの関数は、同じパラメータ名を持つ既存のコンストラクタを囲む単純なラッパーであるようです。ほとんどの場合、渡されたパラメータと内部の関数/メソッド呼び出しの間に何らかの変換があります。パラメータ 'foo'を渡したときにパラメータ' bar'に不平を言う例外を呼び出し元が理解できないかもしれません。 –
http://stackoverflow.com/a/1102113/393487 –
私は「なぜ私は自分の例外をスローするのだろうか?あなた自身に尋ねるべき質問です。あなたがその理由を見ないなら、それはなぜですか?とにかく、MailMessageのコンストラクタは、それらのカスタム例外と同じことを伝える例外をスローします。この場合、それらを持つ必要はありませんが、より洗練されたケースでは、別の問題です。 。 –