バリデーションを行うときに、何が最善の方法であるかコードを整理するのかと思っていますか?ベストプラクティスのためのコードを編成するベストプラクティス/練習C#
妥当性検査が失敗した場合は、最初にネストされるか、最初に戻るか?
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (value!= null && value.GetType().Equals(typeof(string)))
{
var text = value.ToString();
if (Regex.IsMatch(text, "^[-+]?[0-9]{1,2}.?[0-9]{0,6}?,[-+]?[0-9]{1,3}.?[0-9]{0,6}?$"))
{
var cordinations = text.Split(',');
if (cordinations.Length == 2)
{
decimal latitude = 0;
decimal longitude = 0;
if (decimal.TryParse(cordinations[0].Replace(" ", string.Empty), out latitude) && decimal.TryParse(cordinations[1].Replace(" ", string.Empty), out longitude))
{
if ((latitude >= -90 && latitude <= 90) && (longitude >= -180 && longitude <= 180))
return ValidationResult.Success;
}
}
}
}
return new ValidationResult(Admin.ResourceManager.GetString(ErrorMessageResourceName));
}
これは失敗したシナリオに焦点を当て、私は第二の方法であれば
これは、ネストされた使用して私がした最初の方法、成功したシナリオに焦点を当て、ある
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (value==null)
return new ValidationResult(Admin.ResourceManager.GetString(ErrorMessageResourceName));
if (!value.GetType().Equals(typeof(string)))
return new ValidationResult(Admin.ResourceManager.GetString(ErrorMessageResourceName));
var text = value.ToString();
if (!Regex.IsMatch(text, "^[-+]?[0-9]{1,2}.?[0-9]{0,6}?,[-+]?[0-9]{1,3}.?[0-9]{0,6}?$"))
return new ValidationResult(Admin.ResourceManager.GetString(ErrorMessageResourceName));
var cordinations = text.Split(',');
if (cordinations.Length != 2)
return new ValidationResult(Admin.ResourceManager.GetString(ErrorMessageResourceName));
decimal latitude = 0;
decimal longitude = 0;
if (!decimal.TryParse(cordinations[0].Replace(" ", string.Empty), out latitude) ||
!decimal.TryParse(cordinations[1].Replace(" ", string.Empty), out longitude))
return new ValidationResult(Admin.ResourceManager.GetString(ErrorMessageResourceName));
if (!(latitude >= -90 && latitude <= 90) || !(longitude >= -180 && longitude <= 180))
return new ValidationResult(Admin.ResourceManager.GetString(ErrorMessageResourceName)); .
return ValidationResult.Success;
}
これは今日のベストプラクティスとみなされます。またはこれを行うための他の方法。私はあなたのアイデアを本当にありがとうと思います。
第2の方法は最初の方が読みやすく、 – Fabio
まず、あなたのコードはNREを投げるだろう。もし 'value'が' null'なら 'value is string'で十分だろう。 – Dennis
2番目の方法を読むと、すべての検証が独自の方法で抽出できることを認識することができます。読み込みはより簡単になり、検証のすべての詳細を読む必要はありません – Fabio