「C#クラス設計ハンドブック」(137ページ)のサンプルクラスは、クラスのみのコンストラクター内から特定のフィールドのクラス検証メソッドを呼び出しません。したがって、基本的にサンプルクラスでは、不良データを含むオブジェクトを作成でき、そのデータに対して検証を行うフィールドのプロパティを呼び出すと、そのデータに対してのみエラーがスローされます。だからあなたは今悪いオブジェクトを持っていて、事後までそれを知りません。
コンストラクターからプロパティを呼び出さない理由がわからないため、初期化中に不正なデータが見つかった場合はすぐにエラーがスローされますか?私はそれらを無駄に電子メールで送信しました...
コンストラクターからプロパティを呼び出すことで次の形式を使用する傾向があります-これは初期化データを検証するための適切な構造ですか?ty
class Foo
{
private string _emailAddress;
public Foo(string emailAddress)
{
EmailAddress = emailAddress;
}
public string EmailAddress
{
get { return _emailAddress; }
set
{
if (!ValidEmail(value))
throw new ArgumentException
(string.Format
("Email address {0} is in wrong format",
value));
_emailAddress = value;
}
}
private static bool ValidEmail(string emailAddress)
{
return Regex.IsMatch
(emailAddress, @"\b[A-Z0-9._%+-]+" +
@"@[A-Z0-9.-]+\.[A-Z]{2,4}\b",
RegexOptions.IgnoreCase);
}
}