MiLo ارسال شده در January 19 اشتراک گذاری ارسال شده در January 19 (ویرایش شده) سلام دوستان گرامی تصمیم گرفتم هر از گاهی از تجربیات شخصیم بزارم ممکنه تجربه اشتباهی باشه ولی انسانم و ممکن الخطا؛ مخفی کننده تو این پست قراره دومین تجربه ام رو بزارم اولی خواستی یه نگاهی بندازی برو لینک زیر. توی این پست میخوایم راجب Decorator حرف بزنیم پس سوال اصلی اینه Decorator چیه؟ دکوریتور ذاتا یک تابع سازندس که خروجیش یک فانکشنه، حالا چیکار میکنه؟ دکوریتور میاد یکسری قابلیت و رفتار رو به یک متد، پراپرتی یا کلس اضافه میکنه بدون اینکه ماهیت و منطق اصلیشو تغییر بده! این خیلی کمک میکنه به تمیزی و خوانا بودن کدت، کار اصلی دکوریتور تزریق متادیتاها هست (در بخش های بعدی راجبش تخصصی تر صحبت میکنیم) مثال عملی: @injectable () export class UserService {} تو این مثال از یک دکوریتور از پیش تعریف شده در NestJs استفاده کردیم، وقتی این دکوریتور روی این کلس اعمال میشه، با استفاده از تزریق متادیتا به سیستم DI میفهمونه که این کلس تزریق شدنی (Injectable) هست و باید یک نمونه از این کلس رو بسازه تا برای تزریق آماده باشه! حالا بیایین یک دکوریتور کاستوم که خودمون نوشتیم رو روی یک کلس اعمال کنیم که درک عمیق تری از دکوریتور داشته باشیم. function sealed(target: Function) { Object.seal(target); Object.seal(target.prototype); } @sealed class person {} این دکوریتور میاد این کلس رو قفل میکنه و نمیزاره پراپرتی جدیدی بهش اضافه کنی، از اونجا که دکوریتور نویسی یک مقدار پیچیدس در پست های بعدی راجبش تخصصی تر صحبت میکنیم. چندی قبل گفتم متادیتا! خب بریم ببینیم متادیتا چی هست؟ -یکی از ویژگی های خاص تایپ اسکریپت توانایی استفاده از متادیتاس، اما چی هست؟ متادیتا یک سری اطلاعات اضافین که میتونن به class , property , method تزریق بشن. این اطلاعات عموما به صورت key-value ذخیره میشن و با استفاده از decorator ها و کتابخونه هایی مثل reflect-metadata قابل set شدن و get شدن هستن -کاربردای اصلیش میشه به مواردای زیر اشاره کرد: تزریق وابستگی (DI) : تو فریمورکایی مثل NestJs از طریق متادیتا ما متوجه میشیم چه چیزی باید قابل تزریق باشه و ... اعتبارسنجی (validation) : ما با استفاده از متادیتا میتونیم یک سری اطلاعات رو به پراپرتی ها اضافه کنیم (مثلا بگیم فیلد x حتما required هست) که مثالش رو باهم در زیر میتونیم ببینیم function Required(target: any, propertyKey: string) { Reflect.defineMetadata('required', true, tartget, propertyKey); } class User { @Required name string; } const isRequired = Reflect.getMetadata('required', User.prototype, 'name'); console.log(isRequired); //true اینجا مشخص کردیم که پراپرتی name الزامیه و باید وارد بشه بدون اینکه تو منطق class اختلال یا تغییری ایجاد کنیم ختم کلام: متادیتا یک لایه اضافی اطلاعاتی رو برنامته که موقع اجرا میتونی بهش دسترسی داشته باشی و با توجه بهش میتونی رفتار و اساس برنامتو تغییر بدی بدون ضربه زدن به منطق اصلیه برنامه! ویرایش شده January 19 توسط MiLo لینک به دیدگاه https://forum.arsacia.ir/topic/100432-my-experience-2/ به اشتراک گذاری در سایت های دیگر تنظیمات بیشتر اشتراک گذاری...
Integer ارسال شده در January 20 اشتراک گذاری ارسال شده در January 20 ممنون بابت وقتی که گذاشتی واسش NO Thing to DO :My Account :My Brothers لینک به دیدگاه https://forum.arsacia.ir/topic/100432-my-experience-2/#findComment-1030412 به اشتراک گذاری در سایت های دیگر تنظیمات بیشتر اشتراک گذاری...
ارسالهای توصیه شده
برای ارسال دیدگاه یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید
برای اینکه بتوانید دیدگاهی ارسال کنید نیاز دارید که کاربر سایت شوید
ایجاد یک حساب کاربری
برای حساب کاربری جدید در سایت ما ثبت نام کنید. عضویت خیلی ساده است!
ثبت نام یک حساب کاربری جدیدورود به حساب کاربری
دارای حساب کاربری هستید؟ از اینجا وارد شوید
ورود به حساب کاربری