Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C#

C# में फ्लुएंट वैलिडेशन का उपयोग क्या है और कैसे उपयोग करें

FluentValidation स्ट्रॉन्गली-टाइप्ड वैलिडेशन नियम बनाने के लिए एक .NET लाइब्रेरी है। यह वैलिडेशन नियम बनाने के लिए फ्लुएंट इंटरफेस और लैम्ब्डा एक्सप्रेशन्स का उपयोग करता है। यह आपके डोमेन कोड को साफ करने और अधिक सामंजस्यपूर्ण बनाने में मदद करता है, साथ ही आपको वैलिडेशन तर्क के लिए एक ही स्थान देता है।

पैकेज इंस्टॉलेशन

<PackageReference Include="FluentValidation" Version="11.9.0" />
// या
dotnet add package FluentValidation

उदाहरण: व्यापक Person वैलिडेटर

using FluentValidation;
using FluentValidation.Results;

static class Program
{
    static void Main(string[] args)
    {
        List<string> errors = new List<string>();
        
        PersonModel person = new PersonModel
        {
            FirstName = "",           // खाली - अमान्य
            LastName = "S",           // बहुत छोटा - अमान्य
            AccountBalance = 100,
            DateOfBirth = DateTime.Now.Date
        };
        
        PersonValidator validator = new PersonValidator();
        ValidationResult results = validator.Validate(person);
        
        if (!results.IsValid)
        {
            foreach (ValidationFailure failure in results.Errors)
            {
                errors.Add(failure.ErrorMessage);
            }
        }
        
        foreach (var item in errors)
        {
            Console.WriteLine(item);
        }
        Console.ReadLine();
    }
}

public class PersonModel
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public decimal AccountBalance { get; set; }
    public DateTime DateOfBirth { get; set; }
}

public class PersonValidator : AbstractValidator<PersonModel>
{
    public PersonValidator()
    {
        RuleFor(p => p.FirstName)
            .Cascade(CascadeMode.StopOnFirstFailure) // पहली विफलता पर रुकें
            .NotEmpty().WithMessage("{PropertyName} is Empty")
            .Length(2, 50).WithMessage("Length ({TotalLength}) of {PropertyName} Invalid")
            .Must(BeAValidName).WithMessage("{PropertyName} Contains Invalid Characters");
        
        RuleFor(p => p.LastName)
            .Cascade(CascadeMode.StopOnFirstFailure)
            .NotEmpty().WithMessage("{PropertyName} is Empty")
            .Length(2, 50).WithMessage("Length ({TotalLength}) of {PropertyName} Invalid")
            .Must(BeAValidName).WithMessage("{PropertyName} Contains Invalid Characters");
    }
    
    protected bool BeAValidName(string name)
    {
        if (string.IsNullOrEmpty(name)) return false;
        
        name = name.Replace(" ", "").Replace("-", "");
        return name.All(char.IsLetter);
    }
}

आउटपुट

First Name is Empty
Length (1) of Last Name Invalid

मुख्य वैलिडेटर्स

वैलिडेटरविवरण
NotEmpty()नल, खाली स्ट्रिंग, डिफ़ॉल्ट मान नहीं
NotNull()नल नहीं (खाली स्ट्रिंग अनुमत)
Length(min, max)स्ट्रिंग/कलेक्शन लंबाई रेंज
MinimumLength(n) / MaximumLength(n)न्यूनतम/अधिकतम लंबाई
EmailAddress()ईमेल फॉर्मेट वैलिडेशन
Matches(regex)रेजेक्स पैटर्न मिलान
Must(predicate)कस्टम वैलिडेशन लॉजिक
InclusiveBetween(min, max)संख्या रेंज (समावेशी)
GreaterThan/LessThanतुलना वैलिडेशन
CreditCard()क्रेडिट कार्ड लुहन एल्गोरिदम
ScalePrecision(precision, scale)दशमलव सटीकता/स्केल

कैस्केड मोड्स

// StopOnFirstFailure - पहला विफल होने पर रुकें (डिफ़ॉल्ट व्यवहार बदलने के लिए)
RuleFor(x => x.Name)
    .Cascade(CascadeMode.StopOnFirstFailure)
    .NotEmpty()
    .Length(2, 50);

// Continue - सभी नियम चलाएं (सभी त्रुटियां एकत्र करें)
RuleFor(x => x.Name)
    .Cascade(CascadeMode.Continue)
    .NotEmpty()
    .Length(2, 50);

सशर्त वैलिडेशन

RuleFor(p => p.SpouseName)
    .NotEmpty()
    .When(p => p.MaritalStatus == MaritalStatus.Married)
    .WithMessage("Spouse name required when married");

RuleFor(p => p.DrivingLicense)
    .NotEmpty()
    .Unless(p => p.Age < 18)
    .WithMessage("Driving license required for adults");

ASP.NET Core एकीकरण

// Program.cs
builder.Services.AddControllers()
    .AddFluentValidationAutoValidation()
    .AddFluentValidationClientsideAdapters();

builder.Services.AddValidatorsFromAssemblyContaining<Program>();

FluentValidation के लाभ

  • पठनीयता: फ्लुएंट सिंटैक्स आत्म-दस्तावेजी है
  • परीक्षण योग्यता: वैलिडेटर्स को स्वतंत्र रूप से यूनिट टेस्ट किया जा सकता है
  • पृथक्करण: वैलिडेशन तर्क मॉडल से अलग
  • पुन: उपयोगिता: वैलिडेटर्स को कई मॉडल्स में साझा किया जा सकता है
  • एक्सटेंसिबिलिटी: कस्टम वैलिडेटर्स आसानी से बनाए जा सकते हैं
  • क्लाइंट-साइड: ASP.NET Core में अनोटेशन्स के लिए स्वचालित समर्थन
  1. Nohup क्या है और इसका उपयोग कैसे करें? Nohup क्या है और इसका उपयोग कैसे करें?

    Linux सिस्टम पर बहुत सारे कमांड उपलब्ध हैं। कुछ आप दिन में कई बार उपयोग करेंगे और अन्य आमतौर पर विशेष उपयोग के मामलों के लिए आरक्षित होते हैं। nohup ऐसा ही एक कमांड है। आप इसका उपयोग हर दिन नहीं करेंगे, लेकिन जब आपको इसकी आवश्यकता होगी तो आप आभारी होंगे कि यह मौजूद है। यहां हम आपको दिखाते हैं कि noh

  1. LVFS क्या है और इसका उपयोग कैसे करें? LVFS क्या है और इसका उपयोग कैसे करें?

    लिनक्स को दैनिक-ड्राइवर डेस्कटॉप ऑपरेटिंग सिस्टम के रूप में उपयोग करने में कई जटिलताएं शामिल हैं। आपको यह विचार करना होगा कि क्या आपके द्वारा उपयोग किए जाने वाले हार्डवेयर के लिए ड्राइवर उपलब्ध हैं, क्या आपके द्वारा उपयोग किए जाने वाले सॉफ्टवेयर उपलब्ध हैं, और क्या लिनक्स उन सभी विभिन्न सुरक्षा नियं

  1. Steam वर्कशॉप क्या है और इसका उपयोग कैसे करें Steam वर्कशॉप क्या है और इसका उपयोग कैसे करें

    Steam वर्कशॉप गेमिंग क्लाइंट Steam का एक हिस्सा है। यह एक समुदाय-संचालित स्थान है जहां उपयोगकर्ता और सामग्री निर्माता अपने पसंदीदा गेम के लिए सामग्री अपलोड और डाउनलोड कर सकते हैं। Steam वर्कशॉप कई अलग-अलग आइटम का समर्थन करता है जिसमें मॉड्स, कलाकृति, स्किन्स, मैप्स और बहुत कुछ शामिल हैं।Steam वर्कशॉ