Proxy হল ES6 এর একটি শক্তিশালী ফিচার, যা একটি অবজেক্টের আচরণ নিয়ন্ত্রণ করতে ব্যবহৃত হয়। এটি একটি handler অবজেক্টের মাধ্যমে কার্যকরী হয়, যা অবজেক্টের পদ্ধতিতে (method) বা প্রপার্টিতে (property) কোনো অপারেশন (যেমন: গেট, সেট, ইনপুট, ডিলিট) ঘটলে তা ইন্টারসেপ্ট করে।
একটি সাধারণ ব্যবহার হচ্ছে validation, যেখানে আপনি একটি অবজেক্টের প্রপার্টি সেট করার আগে একটি নির্দিষ্ট শর্ত পরীক্ষা করতে পারেন।
Proxy এর মাধ্যমে Validation:
ধরা যাক, আমাদের একটি অবজেক্ট রয়েছে, যেখানে age নামক একটি প্রপার্টি থাকবে, এবং আমরা চাই এই প্রপার্টির মান যেন 18 এর নিচে না হয়। এই ধরনের validation করতে Proxy ব্যবহার করা যায়, যেখানে set ট্র্যাপের মাধ্যমে আপনি মান সেট করার আগে চেক করতে পারেন।
Proxy উদাহরণ - Age Validation:
// Validation logic for age
const handler = {
set: function(target, prop, value) {
if (prop === 'age' && value < 18) {
console.log('Error: Age must be 18 or above');
return false; // Prevent setting value
}
target[prop] = value;
return true;
}
};
// Creating a Proxy to handle validation
const person = new Proxy({}, handler);
person.name = 'John';
person.age = 25; // Valid
console.log(person); // { name: "John", age: 25 }
person.age = 15; // Error: Age must be 18 or above
console.log(person); // { name: "John", age: 25 } (age is not updated)
এখানে, person অবজেক্টটি একটি Proxy দ্বারা তৈরি করা হয়েছে, এবং set ট্র্যাপ ব্যবহার করে age প্রপার্টির মান যাচাই করা হয়েছে। যদি age 18 এর নিচে সেট করা হয়, তাহলে আমরা একটি Error মেসেজ প্রদর্শন করছি এবং মান সেট হওয়া বন্ধ করে দিচ্ছি।
Proxy এর মাধ্যমে আরো Complex Validation উদাহরণ:
ধরা যাক, আমরা একটি অবজেক্টের বিভিন্ন প্রপার্টি যাচাই করতে চাই। যেমন, name প্রপার্টির জন্য কিছু নির্দিষ্ট নিয়ম (ধরা যাক, নামটি অবশ্যই অক্ষরের সংখ্যা হতে হবে), age প্রপার্টির জন্য বয়সের একটি সীমা (18 এর বেশি) এবং email প্রপার্টির জন্য একটি বৈধ ইমেইল ঠিকানা।
Complex Validation উদাহরণ:
const handler = {
set: function(target, prop, value) {
if (prop === 'age' && (value < 18 || value > 100)) {
console.log('Error: Age must be between 18 and 100');
return false;
}
if (prop === 'name' && !/^[a-zA-Z]+$/.test(value)) {
console.log('Error: Name must only contain letters');
return false;
}
if (prop === 'email' && !/\S+@\S+\.\S+/.test(value)) {
console.log('Error: Invalid email address');
return false;
}
target[prop] = value;
return true;
}
};
const user = new Proxy({}, handler);
// Valid inputs
user.name = "John";
user.age = 30;
user.email = "john.doe@example.com";
console.log(user); // { name: "John", age: 30, email: "john.doe@example.com" }
// Invalid inputs
user.name = "John123"; // Error: Name must only contain letters
user.age = 17; // Error: Age must be between 18 and 100
user.email = "invalid-email"; // Error: Invalid email address
console.log(user); // { name: "John", age: 30, email: "john.doe@example.com" }
এখানে, handler এর মাধ্যমে আমরা একাধিক প্রপার্টি যাচাইয়ের নিয়ম যুক্ত করেছি। যদি age 18 থেকে 100 এর মধ্যে না থাকে, বা name প্রপার্টি শুধুমাত্র অক্ষরের মধ্যে সীমাবদ্ধ না থাকে, অথবা email বৈধ ফরম্যাটে না থাকে, তবে মান সেট করার আগে সংশ্লিষ্ট ত্রুটি বার্তা প্রদর্শন করা হয় এবং set অপারেশন বাধা পায়।
Proxy এবং Validation এর সুবিধা:
- Encapsulation: Proxy ব্যবহার করে, আপনি অবজেক্টের আচরণ পরিবর্তন করতে পারেন, যেমন ডেটা ভ্যালিডেশন, গেট বা সেট অপারেশন নিয়ন্ত্রণ ইত্যাদি, যা আপনাকে ডেটা সুরক্ষা নিশ্চিত করতে সাহায্য করে।
- Complex Validation Logic: অনেক সময় একাধিক শর্ত বা চেকের প্রয়োজন হয়। Proxy এর মাধ্যমে আপনি অত্যন্ত সহজে এবং কার্যকরভাবে এই সমস্ত জটিল validation যুক্ত করতে পারেন।
- Dynamic Behavior: Proxy আপনাকে ডাইনামিকভাবে নতুন ট্র্যাপ বা অপারেশন যোগ করতে দেয়, যা অবজেক্টের আচরণ পরিবর্তন করতে সাহায্য করে।
- Reusability: একবার Proxy তৈরি করলে, এটি পুনরায় অন্য অবজেক্টের জন্য ব্যবহার করা যায়, ফলে কোডের পুনঃব্যবহারযোগ্যতা বেড়ে যায়।
সারাংশ
Proxy ES6 এর একটি শক্তিশালী ফিচার যা আপনাকে অবজেক্টের গেট, সেট, ইনপুট এবং ডিলিট অপারেশন নিয়ন্ত্রণ করতে সক্ষম করে। এর মাধ্যমে আপনি সহজেই ডেটা ভ্যালিডেশন এবং অন্যান্য বৈশিষ্ট্য যেমন লেজি লোডিং, লগিং ইত্যাদি যোগ করতে পারেন।
Read more