[英]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;
}
我想創建客戶端驗證,並將本地化添加到驗證錯誤中,我還需要創建帶有對數據庫的調用的自定義規則,等等。這兩種方式的優缺點,或者也許我需要選擇另一種方式?
絕對值得閱讀各種選項-選擇您認為最適合您的需求和風格的那一種。
但是,幾乎可以肯定,您最終會在某個時候在服務上創建一個驗證功能來應對業務規則,因此這可能是平局:-)
這里有一些額外的鏈接可能也有用:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.