قواعد FluentValidation
اكتبوا أدوات تحقق واضحة باستخدام الصيغة المرنة
قواعد FluentValidation درس مجاني في C# Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 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 خاصيةً عبر دالة lambda، ثم تسلسل عليها المدققات. وترفض NotEmpty() القيم الفارغة والسلاسل النصية الفارغة والقيم الافتراضية.
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 بدرجة مثل Error أو Warning أو Info، لمساعدة العملاء على الاستجابة بطرق مختلفة.
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» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C# Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C# Academy 4 دروس في المجموع.
ماذا ستتعلم في «قواعد FluentValidation»؟
اكتبوا أدوات تحقق واضحة باستخدام الصيغة المرنة تتمرن على C# Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C# Academy؟
لا تُشترط خبرة سابقة. C# Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «قواعد FluentValidation»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C# Academy هذا؟
نعم. كل درس في C# Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- التحقق باستخدام Data Annotations
- قواعد FluentValidation
- القواعد المخصّصة والمشروطة
- دمج التحقق مع واجهات API