در این مقاله، به سراغ Custom Validation Attribute در ASP.NET Core میرویم؛ ابزاری که به شما اجازه میدهد قوانین شخصیسازیشده خود را مثل یک "مُهر تایید" روی ویژگیهای (Properties) مدلهایتان بزنید.
قبل از اینکه دادهای در دیتابیس ذخیره شود، باید از فیلتر اعتبارسنجی عبور کند. ASP.NET Core به صورت پیشفرض ویژگیهایی مثل [Required]، [StringLength] و [EmailAddress] را در اختیار ما قرار میدهد که به آنها Data Annotations میگوییم.
اما فرض کنید قانونی دارید که میگوید: "نام کاربری نباید شامل کلمه 'Admin' باشد" یا "تاریخ تولد وارد شده نباید برای روزهای جمعه باشد!". برای این موارد، هیچ اتریبیوت آمادهای وجود ندارد. اینجاست که باید دست به کار شده و یک Custom Validation Attribute بسازید.
خوانایی بالا (Readability): به جای نوشتن چندین if تکراری در کنترلر، قانون را مستقیماً روی مدل تعریف میکنید.
استفاده مجدد (Reusability): یک بار قانون را مینویسید و در دهها جای پروژه از آن استفاده میکنید.
تمیز نگه داشتن کنترلر (Clean Code): کنترلر شما فقط مسئول هدایت درخواست است، نه چک کردن فرمت ایمیلهای خاص!
برای ساخت یک اتریبیوت شخصی، کافیست دو گام ساده بردارید:
یک کلاس بسازید که از کلاس پایه ValidationAttribute ارثبری کند.
متد IsValid را بازنویسی (Override) کنید.
گام اول: تعریف کلاس
بیایید یک اعتبارسنج بسازیم که چک کند فیلد مورد نظر حتماً شامل یک کلمه خاص (مثلاً دامنه شرکت ما) باشد.
گام دوم: پیادهسازی متد IsValid
این متد قلب تپنده اتریبیوت شماست. دو پارامتر ورودی دارد:
value: مقداری که کاربر وارد کرده است.
validationContext: اطلاعاتی درباره شیء یا کلاسی که در حال اعتبارسنجی است.
فرض کنید میخواهیم فقط به ایمیلهایی اجازه ثبتنام بدهیم که با دامنه @gemini.com تمام میشوند.
نحوه استفاده در مدل (Model):
حالا کافیست این اتریبیوت را روی Property مورد نظر قرار دهید:
گاهی اعتبار یک فیلد به فیلد دیگری بستگی دارد. مثلاً "تاریخ پایان" حتماً باید بعد از "تاریخ شروع" باشد. در این حالت از پارامتر validationContext استفاده میکنیم:
بسیاری از توسعهدهندگان به جای اتریبیوتها از کتابخانه FluentValidation استفاده میکنند.
Attributes: برای پروژههای کوچک و متوسط عالی هستند و همه چیز دقیقاً روی همان مدل دیده میشود.
FluentValidation: برای قوانین بسیار پیچیده و زمانی که میخواهید منطق اعتبارسنجی را کاملاً از مدل (POCO) جدا کنید، مناسبتر است.
Client-side Validation: اتریبیوتهای سفارشی به صورت خودکار در سمت کلاینت (جاوااسکریپت) اجرا نمیشوند. برای اینکه در مرورگر هم کار کنند، باید رابط IClientModelValidator را پیادهسازی کنید.
تزریق وابستگی (DI): به صورت پیشفرض نمیتوانید سرویسهایی مثل دیتابیس را در سازنده (Constructor) یک اتریبیوت تزریق کنید. برای این کار باید از HttpContext.RequestServices در داخل متد IsValid استفاده کنید.
Custom Validation Attribute یکی از تمیزترین راهها برای پیادهسازی قوانین بیزنس در ASP.NET Core است. این روش به شما کمک میکند تا مدلهایی "خود-توضیح" (Self-documenting) داشته باشید و از ورود دادههای مخرب یا اشتباه به قلب سیستم جلوگیری کنید.
به یاد داشته باشید که اعتبارسنجی خوب، یعنی کاربری که کمتر با خطاهای سروری (500) روبرو میشود و دیتابیسی که همیشه دادههای سالم در خود دارد.
0 نظر
هنوز نظری برای این مقاله ثبت نشده است.