Как проверить свойства в моделях без повторения логики проверки - PullRequest
0 голосов
/ 06 июня 2010

Я создаю приложение ASP.NET Mvc. У меня есть модель данных, скажем, пользователь

<code>
public class user
{
    public int userId {get; private set};
    public string FirstName {get; set;}
}
Проверка должна быть сделана, что имя не может превышать 50 символов.

У меня есть другая модель презентации, в которой у меня есть свойство FirstName. Я не хочу повторять логику валидации в обеих моделях. Я хочу иметь это в одном месте, и это должно быть так.

Я могу сделать это проще, добавив функцию, которая может быть вызвана при установке свойства, например

<code>
private string firstName;
public string FirstName
{
    get
    {
        return firstName;
    }
    set
    {
        if (PropertyValidator.ValidName(value)) // assuming ValidName exists and it will throw an exception if the value is not valid
        {
             firstName = value;
        }
    }
}
Но я ищу что-то гораздо более простое, чтобы мне не нужно было добавлять это для каждого свойства, которое мне нужно, чтобы оно было проверено. Я посмотрел на ValidationAttribute, но опять же я могу проверить это только из контроллера (ModelState.IsValid). Так как эта модель могла использоваться некоторыми другими типами приложений, такими как консольное приложение, я не мог выбрать это. Но если есть способ использовать ModelState.IsValid Mvc вне контроллера, это было бы здорово. Любые предложения приветствуются.

Спасибо !!

Ответы [ 2 ]

1 голос
/ 06 июня 2010

Вы можете взглянуть на FluentValidation . Это отличная структура, которая позволяет вам отделить логику валидации вашей модели от самой модели, предоставляет простой способ модульного тестирования логики валидации и может использоваться в любом приложении и, конечно, * 1005. * легко интегрируется с ASP.NET MVC .

0 голосов
/ 06 июня 2010

Что-то понимаете: вы, программист, единственные, кто знает, какая проверка подходит для каждого свойства вашей программы. Таким образом, вы тот, кто может написать код проверки.

Можете ли вы определить класс Length_Validated_String, который проверяет длину строки, а затем разрешить вашим другим моделям презентаций использовать этот класс и проверку для него вместо того, чтобы каждый раз заново изобретать колесо?

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