簡體   English   中英

什么是更好的驗證方式/地點?

[英]What is the better way/place for validation?

在我的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;
    }       

我想創建客戶端驗證,並將本地化添加到驗證錯誤中,我還需要創建帶有對數據庫的調用的自定義規則,等等。這兩種方式的優缺點,或者也許我需要選擇另一種方式?

asp.net網站為三種情況提供指導:

在做出任何決定之前,這些可能值得閱讀。

絕對值得閱讀各種選項-選擇您認為最適合您的需求和風格的那一種。

但是,幾乎可以肯定,您最終會在某個時候在服務上創建一個驗證功能來應對業務規則,因此這可能是平局:-)

這里有一些額外的鏈接可能也有用:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM