Wykorzystując bibliotekę NHibernate.Validator można w łatwy sposób poradzić sobie z walidacją obiektów w aplikacji desktopowej. Weźmy przykładową klasę biznesową:

public class User
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
}

Przypuśćmy, że użytkownik musi wprowadzić imię i nazwisko i mieć skończone 18 lat. Do zdefiniowania powyższych reguł wykorzystam fluent-interface configuration:

public class UserValidationDef: ValidationDef<User>
{
    public UserValidationDef()
    {
        Define(x => x.FirstName).NotNullableAndNotEmpty();
        Define(x => x.LastName).NotNullableAndNotEmpty();
        Define(x => x.Age).GreaterThanOrEqualTo(18);
    }
}

NHibernate.Validator skonfiguruję w kodzie metody Main klasy Program. Najpierw nagłówki:

using NHibernate.Validator.Cfg.Loquacious;
using NHibernate.Validator.Engine;
using NHibernate.Validator.Event;
using Environment = NHibernate.Validator.Cfg.Environment;

I właściwa konfiguracja:

Environment.SharedEngineProvider = new NHibernateSharedEngineProvider();

var config = new FluentConfiguration();
config.Register(typeof (UserValidationDef).Assembly.ValidationDefinitions())
      .SetDefaultValidatorMode(ValidatorMode.UseExternal);

var ve = Environment.SharedEngineProvider.GetEngine();
ve.Configure(config);

W zdarzeniu przycisku mającego spowodować walidację obiektu klasy User pobieramy silnik NHibernate.Validatora, zczytujemy wprowadzone dane i przekazujemy nowo utworzony obiekt metodzie sprawdzającej:

ValidatorEngine ve = Environment.SharedEngineProvider.GetEngine();
User userToValidate = GetUserFromUI();

if (ve.IsValid(userToValidate))
{
    MessageBox.Show("Formularz wypełniony poprawnie!");
}
else
{
    MessageBox.Show("Formularz wypełniony nieprawidłowo!");
}

I to właściwie wszystko. Oczywiście sama biblioteka oferuje dużo, dużo więcej. W związku z tym, że używam NHibernate.Validatora dość intensywnie na co dzień, w najbliższym czasie postaram się przedstawić kilka ciekawych i praktycznych przykładów zastosowania.