Proxy কি এবং কেন ব্যবহার করা হয়

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

345

Proxy ES6-এর একটি অত্যন্ত শক্তিশালী ফিচার যা JavaScript Objects বা Functions এর আচরণ নিয়ন্ত্রণ করতে সক্ষম। এটি একটি নতুন ডেটা টাইপ, যা একটি target object এর ওপর trap বা handler সেট করে, যার মাধ্যমে সেই object এর প্রপার্টি, মেথড, অথবা অ্যাক্সেস প্যাটার্নগুলোর ওপর বিভিন্ন আচরণ পরিবর্তন করা যায়।

Proxy ব্যবহারের মাধ্যমে, আপনি JavaScript এর সাধারণ কার্যক্রম যেমন getter/setter, method invocation, property validation, intercepting operations ইত্যাদি পরিবর্তন বা কাস্টমাইজ করতে পারেন। এটি debugging, logging, validation, performance monitoring বা even security purposes এ খুবই উপকারী হতে পারে।


Proxy সিনট্যাক্স

Proxy তৈরি করতে দুটি প্যারামিটার প্রয়োজন:

  1. target: এটি একটি সাধারণ object যা আপনার প্রাথমিক object বা function হতে পারে।
  2. handler: এটি একটি object যেখানে trap (কাস্টম আচরণ) সংজ্ঞায়িত করা হয়।
const target = {
  message: "Hello, World!"
};

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(target, handler);
console.log(proxy.message);  // "Hello, World!"
console.log(proxy.nonExistent);  // "Property nonExistent does not exist"

এখানে, handler object এর get trap ব্যবহার করা হয়েছে, যা প্রতিটি প্রপার্টির জন্য কাস্টম আচরণ নির্ধারণ করেছে। যখন আপনি কোন প্রপার্টি অ্যাক্সেস করবেন, এটি পরীক্ষা করে দেখবে যে সেই প্রপার্টি target object-এ আছে কিনা। যদি না থাকে, তবে একটি কাস্টম মেসেজ রিটার্ন করবে।


Proxy এর প্রধান ট্র্যাপ (Traps)

Proxy এর মাধ্যমে অনেক ধরনের trap নির্ধারণ করা যায় যা object বা function এর ওপর বিভিন্ন কাজ করতে সাহায্য করে। কিছু সাধারণ trap এর মধ্যে রয়েছে:

  1. get(target, prop, receiver): কোনো প্রপার্টি অ্যাক্সেস করার সময় কল হয়।
  2. set(target, prop, value, receiver): কোনো প্রপার্টি সেট করার সময় কল হয়।
  3. has(target, prop): in অপারেটর ব্যবহার করার সময় কল হয়।
  4. deleteProperty(target, prop): delete অপারেটর ব্যবহার করার সময় কল হয়।
  5. apply(target, thisArg, argumentsList): function কল করার সময় কল হয়।
  6. construct(target, args): new কিওয়ার্ড ব্যবহার করার সময় কল হয়।

Proxy ব্যবহার উদাহরণ

১. Getter এবং Setter এর মাধ্যমে প্রপার্টি নিয়ন্ত্রণ

const person = {
  firstName: "John",
  lastName: "Doe"
};

const handler = {
  get: function(target, prop) {
    if (prop === "fullName") {
      return `${target.firstName} ${target.lastName}`;
    }
    return prop in target ? target[prop] : `No such property: ${prop}`;
  },
  set: function(target, prop, value) {
    if (prop === "age" && typeof value !== "number") {
      throw new Error("Age must be a number!");
    }
    target[prop] = value;
  }
};

const proxy = new Proxy(person, handler);

console.log(proxy.fullName);  // "John Doe"
proxy.age = 30;  // Age is set
console.log(proxy.age);  // 30

try {
  proxy.age = "thirty";  // Error: Age must be a number!
} catch (e) {
  console.error(e.message);  // Age must be a number!
}

এখানে, get ট্র্যাপ fullName প্রপার্টির জন্য কাস্টম লজিক প্রদান করছে এবং set ট্র্যাপ একটি বৈধতা চেক করছে, যাতে age প্রপার্টি শুধুমাত্র একটি সংখ্যা হতে পারে।

২. Method Invocation (Function Proxy)

const obj = {
  greet(name) {
    return `Hello, ${name}!`;
  }
};

const handler = {
  apply: function(target, thisArg, argumentsList) {
    console.log(`Called with arguments: ${argumentsList}`);
    return target.apply(thisArg, argumentsList);
  }
};

const proxy = new Proxy(obj.greet, handler);
console.log(proxy("John"));  // Called with arguments: John
                            // Hello, John!

এখানে, apply ট্র্যাপ ব্যবহার করা হয়েছে যেটি function কল করার সময় কাস্টম লজিক যুক্ত করছে।


Proxy কেন ব্যবহার করা হয়?

Proxy ব্যবহার করার মূল কারণগুলো হলো:

  1. Logging এবং Debugging: কোডের আচরণ এবং মান কিভাবে পরিবর্তিত হচ্ছে তা ট্র্যাক করতে সাহায্য করে।
  2. Validation: ডেটার ইনপুট বা মডিফিকেশনকে ভ্যালিডেট করা যায়, যেমন ফাংশন বা অবজেক্ট প্রপার্টি সেট করার সময়।
  3. Data Binding: ডেটা বাইন্ডিং এবং DOM ম্যানিপুলেশনকে আরও উন্নত করা।
  4. Access Control: প্রপার্টি অ্যাক্সেস এবং মডিফিকেশনের ওপর নিয়ন্ত্রণ প্রদান।
  5. Default Behaviors: নির্দিষ্ট ডিফল্ট আচরণ দিয়ে object এর প্রপার্টি বা মেথড গুলি কাস্টমাইজ করা যায়।

Proxy এর সুবিধা

  • Dynamic behavior: Proxy ব্যবহার করে আপনি runtime এর সময়ে objects এর আচরণ পরিবর্তন করতে পারেন।
  • Cleaner code: এটি কোডের readability এবং maintainability উন্নত করে, বিশেষ করে যখন আপনাকে একই ধরণের অবজেক্ট এর উপর একাধিক আচরণ প্রয়োগ করতে হয়।
  • Error Handling: ইন্টারসেপ্টেড কোডের মধ্যে error handling এবং validation যোগ করা সম্ভব।

সারাংশ

Proxy ES6-এর একটি অত্যন্ত শক্তিশালী ফিচার যা target objects বা functions এর আচরণ পরিবর্তন করতে সহায়তা করে। এটি বিভিন্ন ধরনের trap (getter, setter, apply, etc.) প্রদান করে, যার মাধ্যমে আপনি object বা function এর ওপর কাস্টম আচরণ এবং validation প্রয়োগ করতে পারেন। Proxy মূলত debugging, logging, validation, এবং অন্যান্য উন্নত কার্যাবলী সম্পাদন করতে ব্যবহৃত হয়।

Content added By
Promotion

Are you sure to start over?

Loading...