Быстрая Проверка и библиотеки

При поиске чего-то полностью различного на днях, я наткнулся на две библиотеки для того, чтобы сделать Быструю Проверку в.NET. Понятие кажется интересным с тех пор до сих пор, я делаю свои проверки с помощью обычного условного выражения и переходящих операторов (если, еще, случай, и т.д.).

В особенно, это делает относительно легким объединить в цепочку некоторые условия, которые могли привести в некоторых случаях к более короткому коду для сложных условий, и встроить несколько сообщений об ошибках для каждого нарушения в том же объекте.

Тем не менее разве это не также создание взгляда кода, более подробного, чем C# обычно, немного как T-SQL может быть время от времени..., и разве это не заставляет код иметь непоследовательный стиль?

Короче говоря, что Вы думаете о Быстрой Проверке и если Вам нравится она, какую библиотеку Вы нашли, чтобы быть лучшими для нее? До сих пор у меня есть рассмотрение http://tnvalidate.codeplex.com/ и http://fluentvalidation.codeplex.com/, который кажется более или менее эквивалентным на первый взгляд...

Спасибо.

5
задан Kharlos Dominguez 11 July 2010 в 13:13
поделиться

2 ответа

Я использую свою собственную библиотеку валидации, которую я опубликовал здесь.

Разница с двумя предложенными вами в том, что валидации помещены в отдельные классы валидаций. Вы можете создать классы валидации и забыть о них, они автоматически обнаруживаются библиотекой валидации.

public class MyModelValidator : FluentValidator<MyModel>
{
  public MyModelValidator()
  {
    Property("FirstName").Required();
    Property("LastName").Required().Min(15);
  }
}

Также легко добавить поддержку локализаций, используя вашу собственную любимую библиотеку локализации (например, таблицу строк)

public class StringTableProvider : ILanguagePrompts
{
    public string this[string modelName, string propertyName]
    {
        get { return Get(modelName, propertyName) ?? "[" + propertyName+ "]"; }
    }

    public string Get(string modelName, string propertyName)
    {
        return Resource1.ResourceManager.GetString(modelName + "_" + propertyName);
    }
}

И для конфигурации:

Validator.LanguageHandler = new StringTableProvider();

Собственно валидация делается так:

User user = new User();
user.FirstName = "Jonas";

var errors = Validator.Validate(user);
if (errors.Count > 0)
{
    // Handle the errors in any way you like.
    // both property names (localized and actual property name) and localized error message is accessible.
}
2
ответ дан 14 December 2019 в 04:29
поделиться

Я сам наткнулся на нечто подобное, и написал это именно для того, чтобы код был менее многословным.

У меня есть своя валидация, где я делаю такие вещи, как:

Validation.IsNullOrEmpty(m => m.FirstName, modelState);
Validation.Validate(m => m.ZipCode, z => z.Length == 5, modelState, 
"ZipCode must be 5 characters long");

Теперь это очень тесно связано с архитектурой MVC, которую я использую, но я нахожу, что это легче читать и поддерживать, чем:

if (string.IsNullOrEmpty(FirstName))
{
  ModelState.AddError("FirstName", "FirstName cannot be empty.");
}

В этом контексте это не так заметно, но когда вы делаете валидацию, у вас может быть МНОГО элементов для валидации, поэтому однострочники становятся намного проще для сканирования и выяснения того, что делает валидация.

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

2
ответ дан 14 December 2019 в 04:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: