امکان اعتبارسنجی در سطح نوع در NET 10 RC1.
نویسنده: وحید نصیری
تاریخ: ۱۴۰۴/۰۶/۱۹ ۱۰:۳۴
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
[Required] یا [Range] بر روی خصوصیات (Properties) کلاسها انجام میشد. اما همواره نیاز به اعتبارسنجیهای پیچیدهتری وجود داشت که به منطق کلی یک شیء مربوط میشد، نه یک خصوصیت منفرد. برای مثال، فرض کنید میخواهید مطمئن شوید که مجموع دو عدد در یک شیء، از یک مقدار خاص تجاوز نمیکند.[SumLimit(42)]
record Point(int X, int Y);
class SumLimitAttribute(int Limit) : ValidationAttribute
{
protected override ValidationResult? IsValid(object? value, ValidationContext _)
{
if (value is Point point && point.X + point.Y > Limit)
{
return new ValidationResult("The sum of X and Y is too high");
}
return ValidationResult.Success;
}
}[SumLimit(42)] بر روی رکورد Point اعمال شده است. متد IsValid بررسی میکند که آیا مجموع خصوصیات X و Y از مقدار تعیین شده (42) بیشتر است یا خیر. این رویکرد به شما اجازه میدهد تا اعتبارسنجیهای مربوط به چندین خصوصیت را در یک مکان متمرکز کنید، که در نهایت به کدی تمیزتر منجر میشود.[SkipValidation][SkipValidation] دقیقاً برای همین منظور طراحی شده است.[SkipValidation] بر روی یک خصوصیت یا پارامتر، اعتبارسنجی آن نادیده گرفته میشود.[SkipValidation] بر روی یک کلاس، تمام خصوصیات و پارامترهای آن از فرآیند اعتبارسنجی حذف میشوند.class Order
{
public Address PaymentAddress { get; set; }
[SkipValidation]
public Address ContactAddress { get; set; }
}
class Address
{
[Required]
public string Street { get; set; }
// ...
}ContactAddress با [SkipValidation] مشخص شده است. در نتیجه، اعتبارسنجی [Required] که بر روی خصوصیت Street در کلاس Address اعمال شده، برای ContactAddress اجرا نخواهد شد، در حالی که برای PaymentAddress به درستی کار میکند. این ویژگی به ویژه زمانی که از یک مدل مشترک در چندین نقطه از برنامه استفاده میکنید، بسیار مفید است.[JsonIgnore] نیز به طور خودکار از اعتبارسنجی حذف میشوند. با این حال، استفاده از [SkipValidation] برای مدیریت صریح این رفتار توصیه میشود.System.ComponentModel.DataAnnotations.Validator است. این یکپارچگی به توسعهدهندگان اطمینان میدهد که منطق اعتبارسنجی در Minimal APIs و Blazor به همان شیوهای که در سایر بخشهای اکوسیستم داتنت عمل میکند، رفتار خواهد کرد.IValidatableObject.Validate: در نهایت، اگر کلاس مورد اعتبارسنجی این رابط (Interface) را پیادهسازی کرده باشد، متد Validate آن فراخوانی میشود.[SkipValidation]، انعطافپذیری و قدرت بیشتری را برای توسعهدهندگان فراهم میکند. این ویژگیها نه تنها به سادهسازی منطقهای پیچیده اعتبارسنجی کمک میکنند، بلکه با یکپارچهسازی رفتار با System.ComponentModel.DataAnnotations.Validator، یک تجربه توسعه سازگار و قابل پیشبینی را در سراسر پلتفرم .NET ارائه میدهند. استفاده از این ابزارهای جدید به شما امکان میدهد تا برنامههای کاربردی ایمنتر و مستحکمتری بسازید که از لحاظ دادهای قابل اعتماد هستند.