التحقق من صحة البيانات في C# (.NET): أداة FluentValidation القوية
التحقق من صحة البيانات هو أحد الجوانب الرئيسية لتطوير تطبيقات آمنة وموثوقة في C# (.NET). سواء كنت تقوم بإنشاء واجهة برمجة تطبيقات ويب على ASP.NET Core، أو تطبيق سطح مكتب على WPF، أو أداة سطر أوامر، فإن التحقق من صحة بيانات الإدخال يساعد في تجنب الأخطاء، وحقن SQL، والأداء غير الصحيح للنظام. في هذه المقالة، سنستعرض بالتفصيل مكتبة FluentValidation - وهي أداة حديثة ومرنة ومستخدمة على نطاق واسع للتحقق من الصحة في نظام .NET البيئي.
ما هو FluentValidation ولماذا هو مطلوب؟
FluentValidation هي مكتبة مفتوحة المصدر لـ .NET تتيح وصف قواعد التحقق من صحة الكائنات باستخدام واجهة fluent (سلسلة من استدعاءات الدوال). على عكس سمات DataAnnotations المضمنة، فإن FluentValidation:
- يفصل منطق التحقق عن نموذج البيانات - يتم نقل القواعد إلى فئات أدوات تحقق منفصلة.
- يدعم السيناريوهات المعقدة - التحقق الشرطي، والقواعد المخصصة، والتحقق عبر الخصائص.
- يتكامل مع ASP.NET Core - يتحقق تلقائيًا من النماذج في وحدات التحكم.
- يبسط الاختبار - يمكن عزل أدوات التحقق بسهولة وتغطيتها باختبارات الوحدة.
التثبيت والإعداد
للبدء، قم بتثبيت الحزمة عبر NuGet Package Manager أو .NET CLI:
dotnet add package FluentValidationإذا كنت تستخدم ASP.NET Core، أضف في Program.cs (أو Startup.cs) تسجيل أدوات التحقق:
builder.Services.AddValidatorsFromAssemblyContaining<MyValidator>();إنشاء أداة تحقق بسيطة
لنفترض أن لدينا نموذج مستخدم:
public class User{ public int Id { get; set; } public string Name { get; set; } public string Email { get; set; } public int Age { get; set; }}لنقم بإنشاء أداة تحقق ترث من AbstractValidator<User>:
using FluentValidation;
public class UserValidator : AbstractValidator<User>{ public UserValidator() { RuleFor(user => user.Name) .NotEmpty().WithMessage("الاسم مطلوب") .Length(2, 50).WithMessage("يجب أن يكون الاسم من 2 إلى 50 حرفًا");
RuleFor(user => user.Email) .NotEmpty().WithMessage("البريد الإلكتروني مطلوب") .EmailAddress().WithMessage("تنسيق البريد الإلكتروني غير صحيح");
RuleFor(user => user.Age) .InclusiveBetween(18, 120).WithMessage("يجب أن يكون العمر بين 18 و 120 عامًا"); }}الآن يمكننا تنفيذ التحقق:
var validator = new UserValidator();var user = new User { Name = "أ", Email = "invalid", Age = 15 };var result = validator.Validate(user);
if (!result.IsValid){ foreach (var error in result.Errors) { Console.WriteLine($"خطأ في {error.PropertyName}: {error.ErrorMessage}"); }}الإمكانيات المتقدمة
1. القواعد المخصصة (Custom validators)
يمكنك كتابة منطق التحقق الخاص بك باستخدام دالة Must أو إنشاء دالة منفصلة:
RuleFor(user => user.Name) .Must(name => !string.IsNullOrEmpty(name) && name.All(char.IsLetter)) .WithMessage("يجب أن يحتوي الاسم على أحرف فقط");2. التحقق الشرطي
تحقق من الخصائص فقط عند استيفاء شروط معينة:
RuleFor(user => user.Email) .NotEmpty().When(user => user.Age > 18) .WithMessage("البريد الإلكتروني مطلوب للمستخدمين البالغين");3. التحقق عبر الخصائص
قارن قيم الخصائص المختلفة:
RuleFor(user => user.Password) .Equal(user => user.ConfirmPa