FluentValidation – cz. 1 proste użycie

Przykładowy widok dodawania nowego stołu do gry wygląda nastepująco:

newGameTable.JPG

Jak widać, ustawiam w formularzu sporo parametrów. Załóżmy, że chcę ustalić regułę: parametr Miasto musi się składać z minimum 3 znaków i mogą to być tylko litery i spacje.

Skorzystam więc z paczki FluentValidation dostępnej przez nugeta.

nuget.JPG

Pełną dokumentację można znaleźć pod linkiem.

Przykład walidatora

Klasa walidatora GameTableValidator.cs wygląda następująco:

public class GameTableValidator : AbstractValidator<GameTableViewModel>
{
	public GameTableValidator()
	{
		RuleFor(gameTable => gameTable.City)
			.MinimumLength(3).WithMessage("Miasto musi mieć minimum 3 znaki!")
			.Matches("^[a-zA-Z\\s]+$").WithMessage("Miasto musi się składać z liter!");
	}
}

A jej użycie w kontrolerze następująco:

public class GameTableController : Controller
{
	private readonly GameTableValidator _gameTableValidator;
	public GameTableController()
	{
		_gameTableValidator = new GameTableValidator();
	}

	[HttpPost]
	public JsonResult Add(GameTableViewModel model)
	{
		var results = _gameTableValidator.Validate(model);
		if (results.IsValid)
		{
			//Do logic
			return Json(null, JsonRequestBehavior.AllowGet);
		}
		var joinedErrors = string.Join(" ", results.Errors.Select(x => x.ErrorMessage).ToList());
		return Json(joinedErrors, JsonRequestBehavior.AllowGet);
	}
}

Nie wygląda to zbyt ładnie, ale mamy jakiś początek. W konstruktorze kontrolera tworzymy nowy obiekt walidatora. W metodzie Add korzystając z tego obiektu walidujemy model. Jeśli nie ma błędów (wartość IsValid to true), wykonujemy logikę. Jeśli są błędy, zwracamy je do widoku.

Jak to wygląda w praktyce?

Przypadek testowy 1

Dla danych (w polu Miasto wpisane a):

example1.JPG

wyświetla się błąd:

error1.JPG

Przypadek tes 2

Dla danych (w polu Miasto wpisane 1):

example2

wyświetla się błąd:

error2

Działa!

Skoro działa, to świetnie. W kolejnym wpisie pokażę, jak poprawić ten kod, żeby działał i wyglądał o wiele lepiej.

4 uwagi do wpisu “FluentValidation – cz. 1 proste użycie

  1. Pingback: FluentValidation – cz. 2 wzorzec fabryki – programmer-girl

  2. Pingback: FluentValidation – cz. 3 testy i nullowalna properta – programmer-girl

Dodaj komentarz