Какой лучший способ / место для проверки? - PullRequest
1 голос
/ 24 апреля 2009

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

Ответы [ 2 ]

2 голосов
/ 24 апреля 2009

Сайт asp.net предлагает руководство для трех случаев:

Вероятно, их стоит прочитать, прежде чем принимать какие-либо решения.

1 голос
/ 26 апреля 2009

Определенно стоит ознакомиться с различными вариантами - выберите тот, который, по вашему мнению, лучше всего соответствует вашим потребностям и стилю.

Однако в определенный момент вы почти наверняка создадите в своем сервисе функцию проверки для соответствия бизнес-правилам, так что это может быть тайм-разрывом: -)

Вот несколько дополнительных ссылок, которые тоже могут быть полезны:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...