IRONSOFTWAREHOME

Fluent Validation w C# - Potężne, a jednocześnie proste narzędzie do walidacji danych

Fluent Validation w C# - Potężne i łatwe narzędzie do walidacji danych

Tim Corey

43m 58s

Walidacja danych jest jednym z filarów niezawodnego rozwoju oprogramowania, a w nowoczesnych aplikacjach .NET potrzebujesz solidnego, łatwego w utrzymaniu i skalowalnego sposobu na jej obsługę. Właśnie tu wkracza FluentValidation, popularna biblioteka .NET do tworzenia silnie typowanych reguł walidacji.

W swoim szczegółowym wideoporadniku "Fluent Validation w C# – Potężne i łatwe narzędzie do walidacji danych", Tim Corey prowadzi widzów przez proces używania FluentValidation krok po kroku. W tym artykułe śledzimy przewodnik Tima, podsumowując kluczowe punkty i przykłady kodu, jednocześnie integrując istotne koncepcje, takie jak niestandardowe walidatory, łączenie walidatorów, integracja z ASP.NET oraz wsparcie dla starszych środowisk, takich jak .NET Core 3.1 i .NET Standard 2.0.

Wprowadzenie: Dlaczego FluentValidation?

Tim rozpoczyna wideo, wyjaśniając, jak walidacja danych często staje się powtarzalna i chaotyczna. Na przykład, kopiowanie i wklejanie podobnych reguł walidacyjnych w różnych częściach projektu narusza zasadę DRY (Don't Repeat Yourself). Zamiast tego, wprowadza FluentValidation — bibliotekę walidacyjną .NET, która jest darmowa, potężna i działa nawet na modelach, które nie są twoje, co czyni ją idealną dla projektów komercyjnych.

Tim podkreśla znaczenie praktykowania tego, czego się uczysz i wskazuje widzom swoją serię Weekly Challenge jako sposób na rozwijanie umiejętności.

Przegląd Aplikacji Demo

Tim używa aplikacji demonstracyjnej WinForms, w której użytkownik może wprowadzić:

  • Imię

  • Nazwisko

  • Saldo konta

  • Datę urodzenia

Chociaż to demo UI, zasady walidacji mają równie dobre zastosowanie w ASP.NET Core, testowaniu API, a nawet w aplikacjach konsolowych.

Niebezpieczeństwo Zaufania Wejściom Użytkownika

Na tym etapie, Tim przypomina programistom: "Nigdy nie ufaj użytkownikowi." Wejście może być często nieprzewidywalne, na przykład wpisanie "dziesięć" zamiast 10. Walidacja takiego wejścia jest niezbędna przed zapisaniem do bazy danych.

Przedstawia przykładowe reguły walidacji:

  • Imiona i nazwiska nie powinny być puste.

  • Saldo konta powinno podlegać regułom finansowym, jak na przykład minimalne wymagania dla sponsorowania finansowego.

  • Data urodzenia nie powinna być w przyszłości ani być starsza niż 120 lat.

Gdzie Powinna Znajdować się Logika Walidacji?

Tim bada opcje konfigurowania walidatorów:

  • Wewnątrz formularza UI

  • W klasie modelu, korzystając z adnotacji danych

  • W oddzielnej klasie walidacyjnej, używając FluentValidation

Zaznacza, że adnotacje danych są ograniczone i często nieodpowiednie, gdy pracuje się z zewnętrznymi bibliotekami lub potrzeba bardziej niestandardowej logiki walidacji.

Instalowanie FluentValidation

Korzystając z Visual Studio, Tim dodaje FluentValidation do swojego projektu za pośrednictwem NuGet. Instaluje wersję 8.1.0, ale zauważa, że FluentValidation jest wielopłatformowe i kompatybilne z:

  • .NET Standard 2.0

  • .NET Core

  • ASP.NET

  • WPF

  • Xamarin

  • I inne

Konfiguracja Tima działa również dla tych, którzy potrzebują wsparcia dla starszych środowisk, w tym FluentValidation 11, które obsługuje .NET Core 3.1 i wcześniejsze.

Tworzenie Klasy Walidatora

Tim pokazuje tworzenie silnie typowanych reguł walidacji poprzez stworzenie nowej klasy:

public class PersonValidator : AbstractValidator<Person>

Ta klasa zawiera całą logikę walidacji dla modelu Person. Korzystając z płynnego interfejsu, reguły walidacji są definiowane wewnątrz konstruktóra.

Pierwsza Reguła Walidacji: Imię

Tim pisze regułę, używając wyrażenia lambda:

RuleFor(p => p.FirstName).NotEmpty();

Używa var validator do walidacji obiektu Person:

var validator = new PersonValidator();
ValidationResult results = validator.Validate(person);

Następnie przechodzi przez wszelkie błędy walidacji, aby wyświetlić przyjazne dla użytkownika komunikaty w polu listy.

Długość Ciągu i Niestandardowe Wiadomości

Tim rozwija regułę walidacji:

RuleFor(p => p.FirstName)
    .NotEmpty().WithMessage("First name is empty")
    .Length(2, 50).WithMessage("Length of first name is invalid");

Korzystając z łączenia walidatorów, ta reguła zapewnia, że imię nie jest ani puste, ani zbyt krótkie/długie. Tim wprowadza Cascade(CascadeMode.Stop), aby zatrzymać walidację przy pierwszej awarii.

Niestandardowa Walidacja: Prawidłowe Znaki w Imionach

Tim implementuje niestandardowy walidator przy użyciu metody o nazwie:

private bool BeAValidName(string name)

To usuwa spacje i kreski oraz zapewnia, że ciąg zawiera jedynie litery Unicode, umożliwiając wsparcie dla międzynarodowych znaków.

Niestandardowa reguła jest stosowana w ten sposób:

.Must(BeAValidName).WithMessage("{PropertyName} contains invalid characters");

Ta struktura metody jest doskonała do dostosowywania do innych pól — na przykład niestandardowej funkcji walidacji kodu pocztowego:

private bool BeAValidPostcode(string postcode)
{
    // Add custom logic here to specify a valid postcode format
}

Możesz ją następnie użyć w walidatorze, takim jak:

RuleFor(c => c.Postcode).Must(BeAValidPostcode)
    .WithMessage("Please specify a valid postcode");

To jest powszechne w projektach komercyjnych wymagających publicznej klasy CustomerValidator lub innych walidatorów specyficznych dla domeny.

Używanie Wbudowanych Zmiennych w Komunikatach o Błędach

Tim pokazuje, jak dynamicznie ulepszać komunikaty za pomocą miejsc zastępczych takich jak:

  • {PropertyName}

  • {TotalLength}

  • {MinLength} i {MaxLength}

To skutkuje kontekstowymi komunikatami o błędach, jak:

"Length of First Name is invalid (was 105)"

To ułatwia użytkownikom naprawianie błędów wejściowych.

Nazwisko i Lokalizacja

Tim kopiuje logikę walidacji FirstName dla LastName, dzięki możliwośćom ponownego użycia formatowania z {PropertyName}. Wspomina także o WithLocalizedMessage() dla ASP.NET lub globalnych aplikacji, które potrzebują wsparcia dla wielu języków.

Ważne: CascadeMode Jest Specyficzny dla Reguł

Tim wyjaśnia, że CascadeMode.Stop dotyczy indywidualnych reguł, a nie globalnie dla całego modelu. Jeśli zarówno FirstName, jak i LastName są puste, obie reguły zostaną wyzwolone — nawet jeśli CascadeMode jest ustawiony.

Walidacja Daty Urodzenia

Następnie Tim dodaje regułę, aby upewnić się, że data urodzenia jest realistyczna:

private bool BeAValidAge(DateTime dob)
{
    var currentYear = DateTime.Now.Year;
    var dobYear = dob.Year;
    return dobYear <= currentYear && dobYear > (currentYear - 120);
}

Używana w ten sposób:

RuleFor(p => p.DateOfBirth)
    .Must(BeAValidAge)
    .WithMessage("Invalid {PropertyName}");

To dobry wzorzec do walidacji danych czasowych jak daty czy okna wygaśnięcia.

Ostateczne Przemyślenia i Rekomendacje

Tim kończy, podsumowując kluczowe zalety FluentValidation:

  • Centralna logika walidacji

  • Łatwość tworzenia niestandardowych walidatorów

  • Kompatybilność zarówno z .NET 5 i nowszymi, jak i starszymi środowiskami

  • Obsługa skomplikowanych modeli, list i reguł asynchronicznych

  • Idealna dla hobbystów oraz projektów komercyjnych

Zachęca widzów do zbadania dokumentacji FluentValidation w poszukiwaniu zaawansowanych sposobów użycia, w tym zagnieżdżonych reguł, walidacji właściwości email i innych.

Wnioski

FluentValidation umożliwia programistom .NET budowanie silnie typowanych reguł walidacji, które są wielokrotnego użytku, ekspresywne i łatwe w utrzymaniu. Czy rozwijasz się przy użyciu .NET Core, .NET 8, czy też utrzymujesz systemy dziedziczne na .NET Core 3.1, ta biblioteka sprawia, że walidacja danych jest prosta.

Z funkcjami takimi jak:

  • Płynny interfejs do budowania reguł

  • Wsparcie dla niestandardowej logiki walidacji kodów pocztowych

  • Łatwa integracja z Visual Studio

  • Kompatybilność z testowaniem API, WinForms i ASP.NET

  • Solidna obsługa awarii walidacji

FluentValidation to must-have w twoim zestawie narzędzi .NET. Aby uzyskać więcej informacji, obejrzyj pełne wideo i subskrybuj kanał Tima tutaj, aby uzyskać więcej inspirujących wideo na temat C#.

Porada: Jeśli jesteś nowy w używaniu FluentValidation, spróbuj zaimplementować własny CustomerValidator z regułami dla właściwości, takich jak public string Name, string Postcode i więcej. Przetestuj to z pomocą mock API lub formularza UI, aby uzyskać praktyczne doświadczenie.

Earn More by Sharing What You Love

Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Let's Stay in Touch!

Join our newsletter, you’ll get exclusive access on article updates. We value your privacy

Key in blue circle

Uzyskaj natychmiast swój darmowy 30-dniowy Klucz Testowy.

Your trial license will be sent to your email address

Brak ograniczeń. 100% dostępności. Bez karty kredytowej.

bullet_checkedNie wymaga karty kredytowej ani tworzenia kontaBrak ograniczeń. 100% dostępności. Bez karty kredytowej.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Otrzymaj swoją Konsultację Bez Zobowiązań
Wypełnij poniższy formularz lub wyślij e-mail na sales@ironsoftware.com
Twoje dane zawsze będą utrzymywane w tajemnicy.
Zaufane przez miliony inżynierów na całym świecie
Logotypy klientów Iron Software
Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta