В моем приложении 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 способа, или, может быть, мне нужно выбрать другой способ?