رفتن به مطلب
مرورگر پیشنهادی آرساکیا گیم مرورگر های تحت موتور کرومیوم می‌باشد، برای دانلود روی مرورگر انتخابی خود کلیک کنید
Google Chrome Microsoft Edge Ungoogled Chromium Brave Opera GX Opera

ارسال‌های توصیه شده


سلام دوستان گرامی تصمیم گرفتم هر از گاهی از تجربیات شخصیم بزارم ممکنه تجربه اشتباهی باشه ولی انسانم و ممکن الخطا؛

 

مخفی کننده

تو این پست قراره دومین تجربه ام رو بزارم اولی خواستی یه نگاهی بندازی برو لینک زیر.
 

 

توی این پست میخوایم راجب 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 اختلال یا تغییری ایجاد کنیم

 

ختم کلام: متادیتا یک لایه اضافی اطلاعاتی رو برنامته که موقع اجرا میتونی بهش دسترسی داشته باشی و با توجه بهش میتونی رفتار و اساس برنامتو تغییر بدی بدون ضربه زدن به منطق اصلیه برنامه!

ویرایش شده توسط MiLo

:)

لینک به دیدگاه
https://forum.arsacia.ir/topic/100432-my-experience-2/
به اشتراک گذاری در سایت های دیگر

برای ارسال دیدگاه یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید دیدگاهی ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در سایت ما ثبت نام کنید. عضویت خیلی ساده است!

ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید

ورود به حساب کاربری
  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی، در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...