กฎแบบกำหนดเองและแบบมีเงื่อนไข
สร้างตรรกะการตรวจสอบที่ซับซ้อนและมีเงื่อนไข
กฎแบบกำหนดเองและแบบมีเงื่อนไข เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การตรวจสอบความถูกต้องด้วยคำอธิบายข้อมูล
- กฎ FluentValidation
- กฎแบบกำหนดเองและแบบมีเงื่อนไข
- การผสานการตรวจสอบเข้ากับ API