یادگیری Castle ActiveRecord با مثال – قسمت پنجم


قسمت اول | قسمت دوم | قسمت سوم | قسمت چهارم

نکته : اگر از گوگل ریدر یا هر فیدخوان دیگری استفاده می کنید و کدها را به درستی مشاهده نمی کنید، لطفاً مطلب اصلی را در وبلاگ بخوانید.

اعتبار سنجی موجودیت ها در Castle ActiveRecord

یک ORM خوب بدون داشتن ویژگی Validation یا اعتبار سنجی کامل نیست. در Castle ActiveRecord با استفاده از کلاس ActiveRecordValidationBase می توان خصوصیات موجودیت ها را قبل از رسیدن به دیتابیس اعتبار سنجی کرد. برای این کار باید کلاس مورد نظر را از کلاس ActiveRecordValidationBase به جای کلاس ActiveRecordBase به ارث برد. با استفاده از امکانات موجود در فضای نام Castle.Components.Validator می توانید قوانین اعتبار سنجی مورد نظر خود را برای پراپرتی های کلاس خود تعریف کنید تا در صورت اشتباه بودن مقادیر وارد شده برای آن ها، آبجکت از ذخیره شدن اطلاعات در دیتابیس جلوگیری کند.   به مثال زیر توجه کنید :

[ActiveRecord(Table="Customers", Lazy=true)]
 public class Customer: ActiveRecordValidationBase<Customer>
 {
 [PrimaryKey(PrimaryKeyType.Native)]
 public virtual long ID { get; set; }

 [ValidateNonEmpty]
 [Property(NotNull=true, Length=250)]
 public virtual string Title { get; set; }

 [Property(Length=50)]
 public virtual string ContactNumber { get; set; }

 [ValidateEmail("Not like an email")]
 [Property(Length=250)]
 public virtual string Email { get; set; }

 [ValidateLength(10,400)]
 [Property(Length=400)]
 public virtual string Address { get; set; }
}

این همان کلاس Customer پروژه مثال MyBookStore است که این بار از کلاس ActiveRecordValidationBase به ارث برده شده است که دارای یک متد مهم به نام IsValid است. در فضای نام Castle.Components.Validator صفت های اعتبارسنجی معمول برای استفاده در سنارویوهای معمول وجود دارد که می توانید از آن ها برای انجام اعمال اعتبارسنجی در سطح موجودیت ها استفاده کنید. در اینجا از صفت ValidateNonEmpty برای اطمینان از خالی یا null نبودن مقدار پراپرتی Title، از صفت ValidateEmail برای اطمینان از صحت فرمت ایمیل وارد شده توسط کاربر و از ValidateLenght برای اعتبارسنجی طول رشته وارد شده کاربر برای پراپرتی Address استفاده شده است.

از Validatorهای مهم دیگر این کتابخانه می توان به ValidateIsUnique که چک می کند مقدار خصوصیت در دیتابیس وجود نداشته باشد، ValidateRegExp که چک می کند مقدار خصوصیت با یک Regular Expression هماهنگ باشد و ValidateIsGreater و ValidateIsLesser که مقدار خصوصیت را با مقدار خصوصیت دیگری از نظر بزرگتر یا کوچکتری مقایسه می کند، اشاره نمود.

اگر کاربر بخواهد مقدار نامعتبری را به هر یک از خصوصیت های این کلاس نبست دهد، یک استثنا رخ خواهد داد. برای جلوگیری از این موضوع شما باید اول مطمئن شوید که مقادیر وارد شده برای خصوصیات یک موجودیت با توجه به Validatorهای تعریف شده برای هر کدام، معتبر باشند. متد IsValid چک می کند که تمام اعتبار سنجی ها با موفقیت انجام شده اند و سپس True برمی گرداند.
ممکن است برخی نیازهای اعتبارسنجی شما برای تعریف به صورت Attribute یک خصوصیت مناسب نباشد. اگر اینطور بود می توانید متد IsValid را Override کنید و متد base را زمانی صدا بزنید که مطمئن شدید اعتبار سنجی شما با موفقیت انجام شده است. برای مثال می خواهیم مطمئن شویم که برای خصوصیت Title این کلاس حتماً بیشتر از 6 کاراکتر وارد شود :

public override bool IsValid()
 {
 if (Title.Length > 6)
 return base.IsValid();
 else
 return false;
 }

اگر هر کدام از مقادیر وارد شده برای پراپرتی های این کلاس با توجه به Validation تعریف شده برای آن ها، معتبر نباشد، یک استثنای ValidationException رخ خواهد داد. برای تغییر این رفتار می توانید متد NotIsValid این کلاس را بر اساس نیاز خود Override کنید.

همانطور که مشاهده کردید، استفاده از Validationها و تعریف اعتبارسنجی های سفارشی در سطح موجودیت ها در Castle ActiveRecord بسیار آسان در عین حال قدرتمند است. شما بر اساس نیاز پروژه خود می توانید پیچیده ترین اعتبار سنجی ها را با استفاده از امکانات این کتابخانه در سطح موجودیت های خود پیاده سازی کنید. این یکی از دلایل مهمی است که Castle ActiveRecord را در نظر من و بسیاری دیگر محبوب ساخته است.

farasun.wordpress.com

این مطلب ادامه دارد…

برای اینکه مطالب بعدی را از دست ندهید، مشترک فید فراسان شوید!

Advertisements