2009-04-24 10 views
1

私の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つの方法の賛否両論、あるいは別の方法を選択する必要がありますか?

答えて

1

さまざまなオプションを読む価値があります。あなたのニーズやスタイルに最も適していると思うものを選択してください。それはタイブレーカーかもしれので

しかし、あなたはほぼ確実に、ビジネスルールに対処するためにいくつかの点であなたのサービスの検証関数を作成することになります

HERESにいくつかの余分なリンク:-)たかもしれませんあまりにも役立つこと:

関連する問題