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

กฎแบบกำหนดเองและแบบมีเงื่อนไข

สร้างตรรกะการตรวจสอบที่ซับซ้อนและมีเงื่อนไข

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

นอกเหนือจากตัวตรวจสอบที่มีมาในตัว

การตรวจสอบความถูกต้องในงานจริงมักต้องใช้ตรรกะแบบกำหนดเอง เช่น ค่าที่ต้องผ่านการตรวจสอบตามโดเมน หรือกฎที่ใช้เฉพาะภายใต้เงื่อนไขบางอย่าง FluentValidation รองรับทั้งสองกรณีด้วย Must, When และชนิดตัวตรวจสอบแบบกำหนดเอง

เงื่อนไขตรรกะของ Must

Must รับเงื่อนไขตรรกะที่ส่งคืนค่า true เมื่อค่าถูกต้อง วิธีนี้เป็นวิธีที่ง่ายที่สุดในการเขียนตรรกะทั่วไปไว้ภายในบรรทัด

RuleFor(c => c.Username)
    .Must(name => !name.Contains(" "))
    .WithMessage("Username cannot contain spaces.");

Must ที่เข้าถึงออบเจ็กต์ทั้งหมด

รูปแบบหนึ่งของ Must จะส่งทั้งออบเจ็กต์ต้นทางและค่าของคุณสมบัติให้คุณ จึงสามารถตรวจสอบค่าข้ามคุณสมบัติได้

RuleFor(o => o.DiscountedPrice)
    .Must((order, discounted) => discounted <= order.OriginalPrice)
    .WithMessage("Discounted price cannot exceed original price.");

กฎแบบมีเงื่อนไขด้วย When

When จะใช้กฎต่อเมื่อเงื่อนไขเป็นจริงเท่านั้น ในกรณีนี้ จะต้องมีที่อยู่สำหรับจัดส่งเฉพาะคำสั่งซื้อสินค้าที่ต้องจัดส่งเท่านั้น

RuleFor(o => o.ShippingAddress)
    .NotEmpty()
    .When(o => o.RequiresShipping);

ตัวปรับแต่ง Unless

Unless เป็นการทำงานตรงข้ามกับ When โดยกฎจะทำงานเว้นแต่เงื่อนไขจะเป็นจริง

RuleFor(o => o.CouponCode)
    .NotEmpty()
    .Unless(o => o.IsGift);

การจัดกลุ่มเงื่อนไข

ห่อกฎหลายรายการไว้ในบล็อก When(...) เดียว เพื่อใช้เงื่อนไขร่วมกันกับกฎทั้งหมดได้อย่างเป็นระเบียบ

When(o => o.RequiresShipping, () =>
{
    RuleFor(o => o.ShippingAddress).NotEmpty();
    RuleFor(o => o.PostalCode).NotEmpty();
});

ตรรกะแบบกำหนดเองแบบอะซิงโครนัสด้วย MustAsync

เมื่อการตรวจสอบต้องใช้ฐานข้อมูลหรือเอพีไอ ให้ใช้ MustAsync และตรวจสอบโมเดลด้วย ValidateAsync

RuleFor(u => u.Email)
    .MustAsync(async (email, cancellation) =>
        !await _repository.EmailExistsAsync(email))
    .WithMessage("Email is already registered.");

การเขียนตัวตรวจสอบแบบกำหนดเองที่ใช้ซ้ำได้

สำหรับตรรกะที่ต้องใช้ซ้ำในหลายโครงการ ให้เขียนเมธอดส่วนขยายบน IRuleBuilder วิธีนี้จะเปลี่ยนกฎแบบกำหนดเองให้เป็นตัวตรวจสอบที่ต่อโซ่ได้และใช้งานได้เช่นเดียวกับตัวตรวจสอบมาตรฐาน

public static class CustomValidators
{
    public static IRuleBuilderOptions<T, string> ValidSlug<T>(
        this IRuleBuilder<T, string> rule)
    {
        return rule.Matches("^[a-z0-9-]+$")
            .WithMessage("Must be a lowercase slug.");
    }
}

การใช้ตัวตรวจสอบแบบกำหนดเอง

เมื่อกำหนดเสร็จแล้ว ส่วนขยายนี้จะต่อโซ่ได้เหมือนตัวตรวจสอบที่มีมาในตัว ทำให้ตัวตรวจสอบของคุณสื่อความหมายได้ชัดเจน

RuleFor(p => p.Slug).NotEmpty().ValidSlug();

เมธอด Custom สำหรับการควบคุมอย่างเต็มที่

สำหรับผลลัพธ์ที่ซับซ้อน Custom ช่วยให้คุณเพิ่มข้อผิดพลาดจากการตรวจสอบแบบสั่งการได้โดยใช้บริบท

RuleFor(o => o.Items).Custom((items, context) =>
{
    if (items.Count == 0)
        context.AddFailure("An order must contain at least one item.");
});

โหมด Cascade

ตามค่าเริ่มต้น ตัวตรวจสอบทั้งหมดในโซ่จะทำงานต่อแม้ว่าตัวใดตัวหนึ่งจะไม่ผ่านแล้วก็ตาม กำหนด CascadeMode.Stop เพื่อหยุดที่ความล้มเหลวแรก ซึ่งช่วยหลีกเลี่ยงการตรวจสอบซ้ำซ้อนหรือไม่ปลอดภัย

RuleFor(c => c.Email)
    .Cascade(CascadeMode.Stop)
    .NotEmpty()
    .EmailAddress();

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

ทดสอบกฎแบบมีเงื่อนไขและกฎแบบกำหนดเอง

สรุปทบทวน

กฎแบบกำหนดเองและกฎแบบมีเงื่อนไขทำให้ FluentValidation ยืดหยุ่นมากขึ้น ได้แก่ Must สำหรับเงื่อนไขตรรกะภายในบรรทัด (พร้อมรูปแบบที่เข้าถึงออบเจ็กต์ทั้งหมดได้), When/Unless สำหรับเงื่อนไข, บล็อก When ที่จัดกลุ่มไว้, MustAsync สำหรับการตรวจสอบที่ต้องรับส่งข้อมูล, ส่วนขยาย IRuleBuilder ที่ใช้ซ้ำได้, เมธอด Custom แบบสั่งการ และโหมด Cascade สำหรับควบคุมลำดับการประเมิน

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

บทเรียน “กฎแบบกำหนดเองและแบบมีเงื่อนไข” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “กฎแบบกำหนดเองและแบบมีเงื่อนไข”

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

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

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

บทเรียน “กฎแบบกำหนดเองและแบบมีเงื่อนไข” ใช้เวลานานแค่ไหน

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

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

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

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

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