Proxy এর মাধ্যমে Object Behavior নিয়ন্ত্রণ করা

Proxy এবং Reflect API - জাভাস্ক্রিপ্ট ইএস৬ (ES6) - Web Development

226

ES6 (ECMAScript 2015) Proxy একটি অত্যন্ত শক্তিশালী ফিচার, যা আপনাকে একটি অবজেক্টের (object) আচরণ (behavior) নিয়ন্ত্রণ করার জন্য বিশেষ কৌশল প্রদান করে। Proxy একটি ওয়্র্যাপার (wrapper) অবজেক্ট হিসেবে কাজ করে, যা আপনার কোডের ভেতর কোনো অবজেক্টের প্রপার্টি অ্যাক্সেস, মিউটেশন বা এক্সিকিউশন এর সময় trap ফাংশন ব্যবহার করে তার আচরণ পরিবর্তন করতে পারে। এটি মূলত meta-programming এর অংশ, যেখানে আপনি অবজেক্টগুলোর আচরণকে কাস্টমাইজ করতে পারেন।


Proxy কি?

Proxy একটি অবজেক্ট, যা অন্য একটি অবজেক্টের "প্রক্সি" হিসেবে কাজ করে এবং ঐ অবজেক্টের প্রপার্টি অ্যাক্সেস, সেটিং এবং অন্যান্য অপারেশনগুলো নিয়ন্ত্রণ করে। এটি অবজেক্টের এক্সেস এবং আচরণ কাস্টমাইজ করতে পারে, উদাহরণস্বরূপ, গেট, সেট, চেক বা ডিলিট অপারেশনগুলোর জন্য।

Proxy এর সিনট্যাক্স

const proxy = new Proxy(target, handler);
  • target: মূল অবজেক্ট, যার উপর Proxy কাজ করবে।
  • handler: একটি অবজেক্ট যা বিভিন্ন "trap" মেথডগুলো ধারণ করে, যেমন get, set, deleteProperty, ইত্যাদি।

Proxy এর Trap Methods

Proxy এর "trap" মেথডগুলো হল ফাংশন, যা নির্দিষ্ট কাজ (যেমন get, set, delete, etc.) পরিচালনা করে। কিছু সাধারণ "trap" মেথড হলো:

  • get: একটি প্রপার্টি অ্যাক্সেস করার সময় কল হয়।
  • set: একটি প্রপার্টি সেট করার সময় কল হয়।
  • deleteProperty: একটি প্রপার্টি ডিলিট করার সময় কল হয়।
  • has: একটি প্রপার্টি আছে কিনা তা চেক করার সময় কল হয়।

Proxy এর উদাহরণ

1. get Trap Example

const person = {
  name: "Alice",
  age: 30
};

const handler = {
  get: function(target, prop, receiver) {
    if (prop in target) {
      return target[prop];
    } else {
      return `Property ${prop} does not exist!`;
    }
  }
};

const proxy = new Proxy(person, handler);

console.log(proxy.name);  // Alice
console.log(proxy.age);   // 30
console.log(proxy.gender); // Property gender does not exist!

এখানে, get trap ব্যবহৃত হয়েছে, যা কোন প্রপার্টি অ্যাক্সেস করার সময় trigger হয়। যদি প্রপার্টি target অবজেক্টে না থাকে, তবে এটি একটি কাস্টম বার্তা প্রদান করবে।

2. set Trap Example

const person = {
  name: "Alice",
  age: 30
};

const handler = {
  set: function(target, prop, value, receiver) {
    if (prop === "age" && value < 0) {
      console.log("Age cannot be negative!");
      return false;
    } else {
      target[prop] = value;
      return true;
    }
  }
};

const proxy = new Proxy(person, handler);

proxy.age = 25; // Works fine
console.log(proxy.age); // 25

proxy.age = -5; // Age cannot be negative!
console.log(proxy.age); // 25 (unchanged)

এখানে, set trap ব্যবহৃত হয়েছে, যা প্রপার্টি সেট করার সময় কাস্টম লজিক চেক করে। যদি age এর মান নেতিবাচক হয়, তবে সেটি পরিবর্তন হবে না এবং একটি বার্তা প্রদর্শিত হবে।

3. deleteProperty Trap Example

const person = {
  name: "Alice",
  age: 30
};

const handler = {
  deleteProperty: function(target, prop) {
    if (prop === "age") {
      console.log("Cannot delete age!");
      return false; // prevents deletion
    } else {
      delete target[prop];
      return true;
    }
  }
};

const proxy = new Proxy(person, handler);

delete proxy.name;  // Deletes the 'name' property
console.log(proxy.name);  // undefined

delete proxy.age;  // Cannot delete age!
console.log(proxy.age);  // 30 (unchanged)

এখানে, deleteProperty trap ব্যবহৃত হয়েছে, যা একটি প্রপার্টি ডিলিট করার সময় কার্যকর হয়। age প্রপার্টি ডিলিট হতে দেয়া হয়নি।

4. has Trap Example

const person = {
  name: "Alice",
  age: 30
};

const handler = {
  has: function(target, prop) {
    if (prop === "age") {
      return false; // Pretend 'age' doesn't exist
    }
    return prop in target;
  }
};

const proxy = new Proxy(person, handler);

console.log("name" in proxy);  // true
console.log("age" in proxy);   // false (even though 'age' exists in the target)

এখানে, has trap ব্যবহার করা হয়েছে, যা একটি প্রপার্টি অস্তিত্ব যাচাই করার সময় কাস্টম লজিক প্রয়োগ করে। age এর অস্তিত্ব অস্বীকার করা হয়েছে।


Proxy এর ব্যবহার

  1. Data Validation: Proxy এর মাধ্যমে আপনি ডেটা সেট করার সময় প্রপার validation লজিক যোগ করতে পারেন, যেমন negative values reject করা।
  2. Logging/Monitoring: Proxy ব্যবহার করে অবজেক্টের প্রতিটি অ্যাক্সেস বা পরিবর্তন লগ করা যেতে পারে, যা ডিবাগিং বা ম্যানিটরিং এর কাজে আসতে পারে।
  3. Object Wrapping: Proxy দিয়ে অবজেক্টের আচরণ পরিবর্তন করা যায়, যেমন একাধিক অবজেক্টের উপর একসাথে কাজ করা বা তাদের কিছু আচরণ নিয়ন্ত্রণ করা।

সারাংশ

Proxy হল একটি শক্তিশালী ES6 ফিচার যা অবজেক্টের আচরণ কাস্টমাইজ এবং নিয়ন্ত্রণ করতে সাহায্য করে। এর মাধ্যমে আপনি অবজেক্টের গেট, সেট, ডিলিট, এবং অন্যান্য কার্যাবলীকে পরিচালনা করতে পারেন। Proxy বিশেষ করে meta-programming এর জন্য ব্যবহৃত হয় এবং এটি অ্যাসিঙ্ক্রোনাস কোড, ডেটা ভ্যালিডেশন, এবং লগিং/মনিটরিংয়ের জন্য খুবই উপকারী।

Content added By
Promotion

Are you sure to start over?

Loading...