2009-04-24 43 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

絕對值得閱讀各種選項 - 選擇你認爲最適合你的需求和風格的選擇。

但是,你幾乎肯定會最終在某一點上創建您的服務驗證功能,以應付業務規則,所以可能是決勝:-)

繼承人一些額外的鏈接,其可能是太有用:

相關問題