القواعد المخصّصة والمشروطة
أنشئوا منطق تحقق معقدًا ومشروطًا
القواعد المخصّصة والمشروطة درس مجاني في C# Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 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
عندما يحتاج الفحص إلى قاعدة بيانات أو واجهة API، استخدم 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 إضافة حالات فشل التحقق بشكل إجرائي باستخدام سياق.
RuleFor(o => o.Items).Custom((items, context) =>
{
if (items.Count == 0)
context.AddFailure("An order must contain at least one item.");
});أوضاع التسلسل
بشكل افتراضي، تعمل جميع المدققات في السلسلة حتى بعد فشل أحدها. اضبط CascadeMode.Stop لإيقاف التنفيذ عند أول فشل، وتجنب عمليات الفحص الزائدة أو غير الآمنة.
RuleFor(c => c.Email)
.Cascade(CascadeMode.Stop)
.NotEmpty()
.EmailAddress();تحقق سريع
اختبر القواعد الشرطية والمخصصة.
مراجعة
تجعل القواعد المخصصة والشرطية FluentValidation مرنة: استخدم Must للدوال الشرطية المضمّنة، مع تحميل زائد يتيح الوصول إلى الكائن بأكمله، وWhen/Unless للشروط، وكتل When المجمّعة، وMustAsync لفحوصات الإدخال والإخراج، وامتدادات IRuleBuilder القابلة لإعادة الاستخدام، والطريقة الإجرائية Custom، وأوضاع Cascade للتحكم في تدفق التقييم.
الأسئلة الشائعة
هل درس «القواعد المخصّصة والمشروطة» مجاني؟
نعم — نص درس «القواعد المخصّصة والمشروطة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C# Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C# Academy 4 دروس في المجموع.
ماذا ستتعلم في «القواعد المخصّصة والمشروطة»؟
أنشئوا منطق تحقق معقدًا ومشروطًا تتمرن على C# Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C# Academy؟
لا تُشترط خبرة سابقة. C# Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «القواعد المخصّصة والمشروطة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C# Academy هذا؟
نعم. كل درس في C# Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- التحقق باستخدام Data Annotations
- قواعد FluentValidation
- القواعد المخصّصة والمشروطة
- دمج التحقق مع واجهات API