TypeScript Metadata Reflection API এর ব্যবহার

TypeScript এর Decorators এবং Metadata - টাইপস্ক্রিপ্ট (Typescript) - Web Development

197

TypeScript Metadata Reflection API একটি বিশেষ ফিচার যা ক্লাস, প্রোপার্টি, মেথড এবং প্যারামিটার সম্পর্কিত মেটাডেটা (অর্থাৎ, টাইপ সম্পর্কিত তথ্য) সংগ্রহ এবং ব্যবহারের সুবিধা দেয়। এটি TypeScript প্রোগ্রামিংয়ে রিফ্লেকশন (Reflection) এর মাধ্যমে মেটাডেটা এক্সেস করতে এবং কোডের আচরণ বা কাঠামো প্রোগ্রাম্যাটিকভাবে পরিবর্তন করতে ব্যবহৃত হয়।

১. Metadata Reflection API এর পরিচিতি

TypeScript মেটাডেটা রিফ্লেকশন সাধারণত ডেকোরেটর এবং রিফ্লেকশন ব্যবহার করে, যা মেটাডেটা সংগ্রহ এবং সংরক্ষণ করার জন্য বিশেষ কৌশল সরবরাহ করে। reflect-metadata লাইব্রেরিটি TypeScript-এ রিফ্লেকশন কার্যকলাপ পরিচালনার জন্য ব্যবহৃত হয়। এটি ES7 বা TypeScript ডেকোরেটর সমর্থন করে এবং টাইপ মেটাডেটার সঙ্গে ইন্টারঅ্যাকশন করার জন্য প্রয়োজনীয় ফিচারগুলো প্রদান করে।

TypeScript এ মেটাডেটা রিফ্লেকশন ব্যবহার করতে হলে reflect-metadata প্যাকেজটি ইনস্টল করা প্রয়োজন।

reflect-metadata ইনস্টল করা

npm install reflect-metadata

এছাড়া, TypeScript কনফিগারেশন ফাইলে experimentalDecorators এবং emitDecoratorMetadata অপশনগুলো সক্ষম করতে হবে।

tsconfig.json উদাহরণ:

{
  "compilerOptions": {
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true
  }
}

২. Metadata Reflection API এর মূল ফাংশন

TypeScript এ মেটাডেটা রিফ্লেকশন করার জন্য কিছু প্রধান ফাংশন ব্যবহার করা হয়:

  • Reflect.metadata(metadataKey, metadataValue) – ডেকোরেটরের মাধ্যমে মেটাডেটা সেট করা।
  • Reflect.getMetadata(metadataKey, target, targetKey) – মেটাডেটা রিড করা।
  • Reflect.hasMetadata(metadataKey, target, targetKey) – মেটাডেটা উপস্থিতি চেক করা।

৩. উদাহরণ: মেটাডেটা রিফ্লেকশন

৩.১. ডেকোরেটর ব্যবহার করে মেটাডেটা সেট করা

প্রথমে, আপনি @Reflect.metadata ডেকোরেটর ব্যবহার করে মেটাডেটা সংরক্ষণ করতে পারেন।

import "reflect-metadata";

function Role(role: string) {
  return function(target: any, key: string | symbol) {
    Reflect.metadata("role", role)(target, key);
  };
}

class User {
  @Role("admin")
  name: string;

  constructor(name: string) {
    this.name = name;
  }
}

এখানে:

  • Role ডেকোরেটরটি name প্রোপার্টির জন্য মেটাডেটা হিসেবে "admin" সংরক্ষণ করছে।

৩.২. মেটাডেটা এক্সেস করা

মেটাডেটা সেট করার পর, আপনি Reflect.getMetadata ফাংশন ব্যবহার করে সেটি রিড করতে পারেন।

const user = new User("Alice");

// মেটাডেটা রিড করা
const role = Reflect.getMetadata("role", user, "name");
console.log(role);  // Output: admin

এখানে:

  • Reflect.getMetadata ব্যবহার করে name প্রোপার্টির জন্য সংরক্ষিত "role" মেটাডেটা রিড করা হচ্ছে এবং এটি "admin" রিটার্ন করছে।

৪. মেটাডেটা রিফ্লেকশন দিয়ে ক্লাসের তথ্য সংগ্রহ

আপনি পুরো ক্লাসের জন্যও মেটাডেটা সংগ্রহ করতে পারেন, যেমন কোন প্রোপার্টি বা মেথডে ডেকোরেটর অ্যাপ্লাই করা হয়েছে।

উদাহরণ: মেথড এবং প্যারামিটার মেটাডেটা

import "reflect-metadata";

function Log(target: any, key: string, descriptor: PropertyDescriptor) {
  Reflect.metadata("log", "Logging Method")(target, key);
}

class Product {
  @Log
  calculatePrice(price: number): number {
    return price * 1.2;
  }
}

const product = new Product();
const logMetadata = Reflect.getMetadata("log", product, "calculatePrice");
console.log(logMetadata);  // Output: Logging Method

এখানে:

  • Log ডেকোরেটরটি calculatePrice মেথডের জন্য মেটাডেটা হিসেবে "Logging Method" যোগ করছে।
  • পরে, Reflect.getMetadata ব্যবহার করে এই মেটাডেটা রিড করা হয়।

৫. Metadata Reflection API এর ব্যবহার

Metadata Reflection API সাধারণত ডাইনামিক ক্লাস কনফিগারেশন, ভ্যালিডেশন, ডেটাবেস ORM, ডিপেনডেন্সি ইনজেকশন এবং প্রপার্টি বা মেথডের আচরণ কাস্টমাইজ করতে ব্যবহৃত হয়।

উদাহরণ: ডিপেনডেন্সি ইনজেকশন

ডিপেনডেন্সি ইনজেকশন বা DI সিস্টেম তৈরি করতে মেটাডেটা রিফ্লেকশন ব্যবহার করা যায়। যেমন:

import "reflect-metadata";

class Service {
  sayHello() {
    console.log("Hello from Service!");
  }
}

function Injectable(target: any) {
  Reflect.defineMetadata("injectable", true, target);
}

@Injectable
class App {
  constructor(private service: Service) {}

  run() {
    this.service.sayHello();
  }
}

const app = new App(new Service());
app.run();  // Output: Hello from Service!

এখানে:

  • Injectable ডেকোরেটরটি ক্লাসে মেটাডেটা সংরক্ষণ করছে এবং ডিপেনডেন্সি ইনজেকশন ব্যবস্থা তৈরি করা হচ্ছে।

TypeScript Metadata Reflection API ডেকোরেটর এবং রিফ্লেকশন ব্যবহার করে কোডের মেটাডেটা সংগ্রহ এবং পরিবর্তন করতে একটি শক্তিশালী পদ্ধতি প্রদান করে। এটি বিশেষভাবে অ্যাডভান্সড ফিচার এবং লাইব্রেরি তৈরি করার জন্য উপকারী, যেমন ডিপেনডেন্সি ইনজেকশন, ORM এবং ক্লাস লেভেল কনফিগারেশন।

Content added By
Promotion

Are you sure to start over?

Loading...