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