私のasp.net mvcアプリケーションでは、私はビジネスオブジェクトで動作し、それをリポジトリレイヤに渡してコントローラに戻すサービスレイヤを持っています。いいえ、私はオブジェクトを検証する必要があると判断できません。例えば、ビジネス・オブジェクトのクラスのコンポーネントモデル注釈の属性で使用するデータ注釈検証、 - 最初の場所:検証のためのより良い方法/場所は何ですか?
[AcceptVerbs("POST")]
public ActionResult Edit(Source src)
{
if(!ModelState.IsValid){
return View("EditSource", src);
_sourceService.SaveSource(src);
return RedirectToAction("Index");
}
[MetadataType(typeof(Source.MetaSource))]
public class Source
{
private class MetaSource
{
[Required]
public string Name { set; get; }
[Required]
public string Url { set; get; }
}
public int? ID { set; get; }
public string Name { set; get; }
public string Url { set; get; }
public Source()
{
ID = null;
}
第二の方法は、 - 例えば、サービス層に検証辞書を渡すことで、サービス層でオブジェクトを検証:
を[AcceptVerbs("POST")]
public ActionResult Edit(Source src)
{
if (!_sourceService.ValidateSource(src)){
return View("EditSource", src);
_sourceService.SaveSource(src);
return RedirectToAction("Index");
}
public bool ValidateSource(Source srcToValidate)
{
if (string.IsNullOrEmpty(srcToValidate.Name))
_validationDictionary.AddError("Name", "Name is required.");
else
if (srcToValidate.Name.Trim().Length == 0)
_validationDictionary.AddError("Name", "Name is required.");
if (string.IsNullOrEmpty(srcToValidate.Url))
_validationDictionary.AddError("Url", "Url is required.");
else
if (srcToValidate.Url.Trim().Length == 0)
_validationDictionary.AddError("Url", "Url is required.");
return _validationDictionary.IsValid;
}
私はクライアントサイド検証を作成し、検証エラーにローカライズを追加すると思います。また、データベースへの呼び出しなどカスタムルールを作成する必要があります。この2つの方法の賛否両論、あるいは別の方法を選択する必要がありますか?