ما هو FluentValidation ولماذا هو مطلوب؟
\n\nFluentValidation هي مكتبة شائعة لـ .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
تثبيت 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\ndotnet add package FluentValidation.AspNetCore\n\nبداية سريعة: مثال كود
\n\nلنفترض أن لدينا نموذج مستخدم:
\n\npublic 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>:
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\nvar 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\n1. RuleFor()
\nما يفعله: يحدد قاعدة تحقق لخاصية معينة في الكائن. هذه هي الطريقة الأساسية التي تبدأ بها