czwartek, 29 października 2009
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. Kod źródłowy przykładowej aplikacji można pobrać stąd.