FluentValidation لـ C# (.NET): دليل شامل مع أمثلة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

ما هو FluentValidation ولماذا هو مطلوب؟

\n\n

FluentValidation هي مكتبة شائعة لـ .NET، مصممة لبناء قواعد تحقق صارمة وقابلة للقراءة للكائنات التجارية. على عكس سمات التحقق المضمنة (Data Annotations)، تقدم FluentValidation نهجًا يعتمد على فصل منطق التحقق عن نموذج البيانات. وهذا يجعل الكود أنظف، وأكثر قابلية للاختبار، وأكثر مرونة.

\n\n

تستخدم المكتبة "واجهة متدفقة" (Fluent Interface)، مما يسمح ببناء سلاسل من قواعد التحقق باستخدام الترميز النقطي. تدعم FluentValidation السيناريوهات المعقدة: التحقق المتسلسل، القواعد الشرطية، المدققين المخصصين، العمل مع القوائم والكائنات المتداخلة.

\n\n

لماذا نحتاج FluentValidation؟

\n
    \n
  • فصل المسؤوليات: قواعد التحقق لا تلوث نموذج البيانات.
  • \n
  • قابلية القراءة: سلاسل القواعد سهلة القراءة والصيانة.
  • \n
  • المرونة: سهولة إنشاء قواعد معقدة وشرطية ومركبة.
  • \n
  • قابلية الاختبار: يمكن اختبار المدققين كفئات عادية.
  • \n
  • التكامل: يتكامل بشكل ممتاز مع ASP.NET Core و MVC و Web API وأطر العمل الأخرى.
  • \n
\n\n

تثبيت FluentValidation

\n\n

يتم تثبيت المكتبة عبر مدير الحزم NuGet. قم بتنفيذ أحد الأوامر التالية في وحدة تحكم مدير الحزم أو في terminal .NET CLI:

\n\n
// التثبيت عبر Package Manager Console\nInstall-Package FluentValidation\n\n// التثبيت عبر .NET CLI\ndotnet add package FluentValidation
\n\n

للتكامل مع ASP.NET Core، ستحتاج أيضًا إلى الحزمة التالية:

\n\n
dotnet add package FluentValidation.AspNetCore
\n\n

بداية سريعة: مثال كود

\n\n

لنفترض أن لدينا نموذج مستخدم:

\n\n
public class User\n{\n    public int Id { get; set; }\n    public string Name { get; set; }\n    public string Email { get; set; }\n    public int Age { get; set; }\n    public string Password { get; set; }\n    public string ConfirmPassword { get; set; }\n}
\n\n

لننشئ مدققًا، عن طريق الوراثة من AbstractValidator<User>:

\n\n
using FluentValidation;\n\npublic class UserValidator : AbstractValidator<User>\n{\n    public UserValidator()\n    {\n        RuleFor(user => user.Name)\n            .NotEmpty().WithMessage("الاسم مطلوب للتعبئة")\n            .Length(2, 50).WithMessage("يجب أن يكون الاسم من 2 إلى 50 حرفًا");\n\n        RuleFor(user => user.Email)\n            .NotEmpty().WithMessage("البريد الإلكتروني مطلوب")\n            .EmailAddress().WithMessage("تنسيق البريد الإلكتروني غير صحيح");\n\n        RuleFor(user => user.Age)\n            .InclusiveBetween(18, 120).WithMessage("يجب أن يكون العمر بين 18 و 120 عامًا");\n\n        RuleFor(user => user.Password)\n            .NotEmpty().WithMessage("كلمة المرور مطلوبة")\n            .MinimumLength(6).WithMessage("يجب أن تحتوي كلمة المرور على 6 أحرف على الأقل");\n\n        RuleFor(user => user.ConfirmPassword)\n            .Equal(user => user.Password).WithMessage("كلمات المرور غير متطابقة");\n    }\n}
\n\n

استخدام المدقق:

\n\n
var validator = new UserValidator();\nvar user = new User\n{\n    Name = "A",\n    Email = "invalid-email",\n    Age = 15,\n    Password = "123",\n    ConfirmPassword = "456"\n};\n\nvar result = validator.Validate(user);\n\nif (!result.IsValid)\n{\n    foreach (var error in result.Errors)\n    {\n        Console.WriteLine($"الخاصية: {error.PropertyName}, الخطأ: {error.ErrorMessage}");\n    }\n}
\n\n

الطرق الأساسية لـ FluentValidation

\n\n

فيما يلي الطرق الرئيسية للمكتبة مع وصف تفصيلي وأمثلة.

\n\n

1. RuleFor()

\n

ما يفعله: يحدد قاعدة تحقق لخاصية معينة في الكائن. هذه هي الطريقة الأساسية التي تبدأ بها

توصيات