Aurelia ফ্রেমওয়ার্কে লাইফটাইম এবং স্কোপ কনফিগারেশন একটি অত্যন্ত গুরুত্বপূর্ণ বিষয়, যা কম্পোনেন্ট, সার্ভিস এবং ডিপেনডেন্সি ইনজেকশন (DI) সিস্টেমের কার্যকারিতা এবং ব্যবস্থাপনা নির্ধারণ করে। এটি আপনার অ্যাপ্লিকেশনে ডিপেনডেন্সি পরিচালনার সুবিধা দেয় এবং নিশ্চিত করে যে আপনি প্রতিটি কম্পোনেন্ট বা সার্ভিসের জন্য সঠিক লাইফটাইম বা স্কোপ পছন্দ করেছেন। এই বিষয়টি বিশেষভাবে বড় অ্যাপ্লিকেশন এবং সিস্টেমে কার্যকরী।
Aurelia DI (Dependency Injection) কনটেইনারের মাধ্যমে লাইফটাইম এবং স্কোপ কনফিগারেশন পরিচালনা করা হয়। DI কনটেইনার আপনাকে এই সিদ্ধান্ত নিতে দেয় যে আপনি আপনার সার্ভিস বা কম্পোনেন্টগুলিকে কিভাবে ইনস্ট্যানশিয়েট করতে চান এবং তাদের লাইফটাইম (যতবার প্রয়োজন হবে তা তৈরি করা হবে অথবা একবার তৈরি হয়ে অ্যাপ্লিকেশন শেষ না হওয়া পর্যন্ত থাকবে)।
লাইফটাইম (Lifetime) কনফিগারেশন
লাইফটাইম কনফিগারেশন মূলত এই বিষয়টি নির্ধারণ করে যে, নির্দিষ্ট সার্ভিস বা কম্পোনেন্ট কতদিন জীবিত থাকবে এবং কখন পুনরায় ইনস্ট্যানশিয়েট করা হবে। Aurelia DI সিস্টেমে বিভিন্ন লাইফটাইম স্ট্র্যাটেজি আছে:
১. Transient (ট্রানজিয়েন্ট)
- ট্রানজিয়েন্ট লাইফটাইম এর মাধ্যমে সার্ভিস প্রতিবার ইনজেক্ট করা হলে নতুন একটি ইনস্ট্যান্স তৈরি করা হয়।
- যদি একটি সার্ভিস এমনভাবে কনফিগার করা হয় যাতে এটি ট্রানজিয়েন্ট হয়, তাহলে প্রতি কম্পোনেন্ট বা কনট্রোলার যখন সেই সার্ভিসকে ইনজেক্ট করবে, তখন নতুন একটি ইনস্ট্যান্স তৈরি হবে।
কিভাবে কনফিগার করবেন:
import { inject } from 'aurelia-framework';
@inject(SomeService)
export class SomeComponent {
constructor(someService) {
this.someService = someService;
}
}
২. Singleton (সিঙ্গেলটন)
- সিঙ্গেলটন লাইফটাইম এর মাধ্যমে সার্ভিসটি একবার তৈরি হবে এবং পুরো অ্যাপ্লিকেশন জুড়ে একই ইনস্ট্যান্স ব্যবহার হবে।
- সাধারণত অ্যাপ্লিকেশনের গ্লোবাল স্টেট বা ডেটা ম্যানেজমেন্টের জন্য সিঙ্গেলটন সার্ভিস ব্যবহার করা হয়, যেখানে সার্ভিসটির একাধিক কপি থাকা প্রয়োজন হয় না।
কিভাবে কনফিগার করবেন:
import { inject } from 'aurelia-framework';
@inject(SomeService)
export class SomeComponent {
constructor(someService) {
this.someService = someService;
}
}
Aurelia ডিফল্টভাবে সিঙ্গেলটন লাইফটাইম ব্যবহার করে, অর্থাৎ যখন একটি সার্ভিস ইনজেক্ট করা হয়, তখন এটি একটি একক ইনস্ট্যান্স তৈরি করে এবং সারা অ্যাপ্লিকেশনের মধ্যে ব্যবহৃত হয়।
৩. Scoped (স্কোপড)
- স্কোপড লাইফটাইম এর মাধ্যমে সার্ভিসটি একটি নির্দিষ্ট স্কোপের মধ্যে ইনস্ট্যানশিয়েট হয় এবং যখন সেই স্কোপ শেষ হয়, তখন সার্ভিসের ইনস্ট্যান্সটিও শেষ হয়ে যায়। সাধারণত এটি রুট বা ভিউ স্কোপে ব্যবহৃত হয়।
- এটি বিভিন্ন দৃশ্য বা রাউটের মধ্যে সার্ভিসের ভিন্ন ভিন্ন ইনস্ট্যান্স ব্যবহার করতে সহায়তা করে।
কিভাবে কনফিগার করবেন:
import { inject } from 'aurelia-framework';
@inject(SomeService)
export class SomeComponent {
constructor(someService) {
this.someService = someService;
}
}
স্কোপ (Scope) কনফিগারেশন
স্কোপ কনফিগারেশন আপনাকে নির্দিষ্ট করে দিতে দেয় যে কোন ডিপেনডেন্সি কোন স্কোপ বা কনটেক্সটে ইনস্ট্যানশিয়েট হবে। স্কোপ হল সার্ভিস বা কম্পোনেন্টের জীবনকাল কিভাবে পরিচালনা করা হবে এবং কতটুকু সীমিত হবে।
১. রুট স্কোপ (Root Scope)
- রুট স্কোপ একটি অ্যাপ্লিকেশনের মূল স্কোপ, যেখানে সমস্ত সার্ভিস এবং কম্পোনেন্ট গ্লোবালি অ্যাক্সেসযোগ্য।
- সাধারণত এই স্কোপে আপনি এমন সার্ভিসগুলো ইনজেক্ট করবেন যা গ্লোবাল ডেটা বা অ্যাপ্লিকেশনের কার্যক্রম পরিচালনা করবে।
২. ভিউ স্কোপ (View Scope)
- ভিউ স্কোপ একটি নির্দিষ্ট ভিউ বা কম্পোনেন্টের জন্য স্কোপ তৈরি করে, যেখানে সার্ভিস শুধুমাত্র সেই ভিউর মধ্যে ব্যবহৃত হবে।
- এটি ব্যবহার করলে, সার্ভিসটির জীবনকাল নির্দিষ্ট ভিউ বা কম্পোনেন্টের মধ্যে সীমাবদ্ধ থাকবে।
৩. ভিউমডেল স্কোপ (ViewModel Scope)
- যখন আপনি একটি ভিউ বা কম্পোনেন্ট তৈরি করেন, তখন সেই ভিউর সাথে সম্পর্কিত ভিউমডেল একটি নতুন স্কোপে কাজ করবে। এর মাধ্যমে আপনি সেই স্কোপের জন্য বিশেষ সার্ভিস এবং ডিপেনডেন্সি ইনজেক্ট করতে পারেন।
Dependency Injection কনফিগারেশন উদাহরণ
Aurelia-তে একটি সাধারণ dependency injection কনফিগারেশন উদাহরণ দেওয়া হলো:
import { inject } from 'aurelia-framework';
import { SomeService } from './some-service';
@inject(SomeService)
export class App {
constructor(someService) {
this.someService = someService;
}
activate() {
console.log(this.someService.getData());
}
}
এখানে, SomeService সার্ভিসটি ট্রানজিয়েন্ট বা সিঙ্গেলটন হিসেবে কনফিগার করা হতে পারে, যা নির্ভর করবে আপনার ব্যবহারের চাহিদার উপর।
উপসংহার
Aurelia-তে লাইফটাইম এবং স্কোপ কনফিগারেশন ডিপেনডেন্সি ইনজেকশনের মাধ্যমে অ্যাপ্লিকেশনের কার্যকারিতা এবং কর্মক্ষমতা নির্ধারণ করে। এটি আপনাকে বিশেষভাবে ট্রানজিয়েন্ট, সিঙ্গেলটন, এবং স্কোপড লাইফটাইম কনফিগারেশনগুলির মাধ্যমে আপনার ডিপেনডেন্সি পরিচালনা করতে সহায়তা করে। এর মাধ্যমে আপনি আপনার অ্যাপ্লিকেশনের ইনস্ট্যান্স এবং সার্ভিসের জীবনকাল নিয়ন্ত্রণ করতে পারেন, যা অ্যাপ্লিকেশনের কার্যকারিতা এবং সাশ্রয়ী সম্পদের ব্যবহার নিশ্চিত করে।
Read more