0Pricing
C# Academy · บทเรียน

กฎ FluentValidation

เขียนตัวตรวจสอบที่สื่อความหมายด้วยไวยากรณ์แบบฟลูเอนต์

กฎ FluentValidation เป็นบทเรียน C# Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C# Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C# Academy มีบทเรียนทั้งหมด 4 บทเรียน

เหตุใดจึงใช้ FluentValidation

FluentValidation เป็นไลบรารี .NET ยอดนิยมที่ย้ายกฎการตรวจสอบความถูกต้องออกจากโมเดลไปไว้ในคลาสตัวตรวจสอบโดยเฉพาะ กฎต่าง ๆ เขียนด้วยเอพีไอแบบอ่านง่ายและต่อโซ่ได้ ทำให้โมเดลสะอาดและกฎสามารถทดสอบได้

dotnet add package FluentValidation
dotnet add package FluentValidation.DependencyInjectionExtensions

คลาสพื้นฐาน AbstractValidator

คุณเขียนตัวตรวจสอบโดยสืบทอดจาก AbstractValidator<T> โดย T คือโมเดลที่คุณต้องการตรวจสอบความถูกต้อง กฎจะกำหนดไว้ในตัวสร้าง

using FluentValidation;

public class CustomerValidator : AbstractValidator<Customer>
{
    public CustomerValidator()
    {
        // rules go here
    }
}

การกำหนดกฎแรกด้วย RuleFor

RuleFor เลือกคุณสมบัติผ่านแลมบ์ดา จากนั้นจึงต่อโซ่ตัวตรวจสอบเข้ากับคุณสมบัตินั้น NotEmpty() จะไม่ยอมรับค่า null สตริงว่าง และค่าเริ่มต้น

public class CustomerValidator : AbstractValidator<Customer>
{
    public CustomerValidator()
    {
        RuleFor(c => c.Name).NotEmpty();
    }
}

การต่อโซ่ตัวตรวจสอบหลายรายการ

RuleFor แต่ละรายการสามารถต่อโซ่ตัวตรวจสอบได้หลายตัว ตัวตรวจสอบจะทำงานตามลำดับและทุกตัวต้องผ่านการตรวจสอบ ทำให้อ่านได้เกือบเหมือนประโยค

RuleFor(c => c.Name)
    .NotEmpty()
    .MinimumLength(2)
    .MaximumLength(50);

ตัวตรวจสอบที่มีมาในตัว

FluentValidation มีตัวตรวจสอบมาให้มากมาย ได้แก่ NotNull, NotEmpty, EmailAddress, Length, InclusiveBetween, GreaterThan, Matches (นิพจน์ทั่วไป) และอื่น ๆ

RuleFor(c => c.Email).NotEmpty().EmailAddress();
RuleFor(c => c.Age).InclusiveBetween(18, 120);
RuleFor(c => c.Phone).Matches(@"^\+?[0-9]{7,15}$");

ข้อความแสดงข้อผิดพลาดแบบกำหนดเอง

ใช้ WithMessage เพื่อแทนที่ข้อความเริ่มต้น คุณสามารถแทรกค่าตัวแทน เช่น {PropertyName} และ {PropertyValue} ได้

RuleFor(c => c.Email)
    .NotEmpty().WithMessage("Email is required.")
    .EmailAddress().WithMessage("{PropertyValue} is not a valid email.");

รหัสข้อผิดพลาดและระดับความรุนแรงแบบกำหนดเอง

นอกจากข้อความแล้ว คุณยังสามารถแนบ WithErrorCode ที่เครื่องอ่านได้ และกำหนด WithSeverity (ข้อผิดพลาด คำเตือน ข้อมูล) เพื่อช่วยให้ไคลเอนต์ตอบสนองแตกต่างกันได้

RuleFor(c => c.Name)
    .NotEmpty()
    .WithErrorCode("NAME_REQUIRED")
    .WithSeverity(Severity.Error);

การตรวจสอบออบเจ็กต์ซ้อนกัน

ใช้ SetValidator เพื่อใช้ตัวตรวจสอบซ้ำกับออบเจ็กต์ย่อย ทำให้กฎต่าง ๆ แบ่งเป็นส่วนย่อยได้อย่างเป็นระบบ

public class OrderValidator : AbstractValidator<Order>
{
    public OrderValidator()
    {
        RuleFor(o => o.Customer).SetValidator(new CustomerValidator());
    }
}

การตรวจสอบคอลเลกชัน

RuleForEach ใช้กฎกับทุกรายการในคอลเลกชัน

public class OrderValidator : AbstractValidator<Order>
{
    public OrderValidator()
    {
        RuleForEach(o => o.Items)
            .ChildRules(item => item.RuleFor(i => i.Quantity).GreaterThan(0));
    }
}

การเรียกใช้ตัวตรวจสอบด้วยตนเอง

คุณสามารถเรียกใช้ตัวตรวจสอบโดยตรงและตรวจสอบผลลัพธ์ได้ ValidationResult แสดงค่า IsValid และรายการ Errors

var validator = new CustomerValidator();
ValidationResult result = validator.Validate(customer);

if (!result.IsValid)
{
    foreach (var error in result.Errors)
    {
        Console.WriteLine(error.PropertyName + ": " + error.ErrorMessage);
    }
}

การตรวจสอบแบบอะซิงโครนัส

เมื่อกฎต้องใช้การรับส่งข้อมูล เช่น การตรวจสอบฐานข้อมูล ให้ใช้ ValidateAsync และตัวตรวจสอบแบบอะซิงโครนัส เช่น MustAsync ซึ่งเราจะศึกษาในบทเรียนกฎแบบกำหนดเอง

ValidationResult result = await validator.ValidateAsync(customer);

ตรวจสอบความเข้าใจ

ทดสอบพื้นฐานของ FluentValidation

สรุปทบทวน

FluentValidation เก็บกฎไว้ในคลาส AbstractValidator<T> โดย RuleFor ใช้ระบุคุณสมบัติ จากนั้นจึงต่อโซ่ตัวตรวจสอบที่มีมาในตัว เช่น NotEmpty, EmailAddress และ InclusiveBetween ปรับแต่งข้อมูลตอบกลับด้วย WithMessage, WithErrorCode และ WithSeverity ใช้ตรรกะซ้ำด้วย SetValidator และ RuleForEach และเรียกใช้กฎผ่าน Validate/ValidateAsync

คำถามที่พบบ่อย

บทเรียน “กฎ FluentValidation” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “กฎ FluentValidation” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C# Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C# Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “กฎ FluentValidation”

เขียนตัวตรวจสอบที่สื่อความหมายด้วยไวยากรณ์แบบฟลูเอนต์ คุณปฏิบัติ C# Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C# Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C# Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “กฎ FluentValidation” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน C# Academy นี้ได้ไหม

ได้ บทเรียน C# Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การตรวจสอบความถูกต้องด้วยคำอธิบายข้อมูล
  2. กฎ FluentValidation
  3. กฎแบบกำหนดเองและแบบมีเงื่อนไข
  4. การผสานการตรวจสอบเข้ากับ API
← กลับไปที่ C# Academy