Ember.js-এ Service একটি বিশেষ ধরনের JavaScript ক্লাস যা অ্যাপ্লিকেশনের মধ্যে শেয়ারযোগ্য এবং দীর্ঘমেয়াদী (long-lived) স্টেট এবং কার্যকলাপ পরিচালনা করতে ব্যবহৃত হয়। এটি এক বা একাধিক কম্পোনেন্ট, কন্ট্রোলার, বা রাউটের মধ্যে পুনঃব্যবহারযোগ্য ডেটা এবং কার্যকলাপ সরবরাহ করতে সহায়ক।
Services সাধারণত ব্যবহারকারীর প্রমাণীকরণ তথ্য, সেন্সর ডেটা, লজিকাল অপারেশন, অথবা অ্যাপ্লিকেশন স্তরের শেয়ারযোগ্য ডেটা পরিচালনা করতে ব্যবহৃত হয়। Service গুলো Ember-এর ডিপেন্ডেন্সি ইনজেকশন (DI) সিস্টেমের মাধ্যমে সারা অ্যাপ্লিকেশন জুড়ে ইনজেক্ট করা যায়, যা ডেটার সহজ প্রবাহ এবং পুনঃব্যবহারযোগ্যতা নিশ্চিত করে।
Service কী এবং কেন ব্যবহৃত হয়?
Service হল একটি ক্লাস যা অ্যাপ্লিকেশনের মধ্যে শেয়ারযোগ্য ডেটা বা লজিক পরিচালনা করে। এটি একাধিক কম্পোনেন্ট, কন্ট্রোলার, এবং রাউটের মধ্যে শেয়ার করা যেতে পারে। এটি সাধারণত স্টেটফুল হয়, যা সারা অ্যাপ্লিকেশন জুড়ে একটি নির্দিষ্ট স্টেট বজায় রাখতে সহায়ক।
কেন Service ব্যবহৃত হয়?
- শেয়ারযোগ্য ডেটা এবং লজিক: একাধিক কম্পোনেন্ট বা রাউটের মধ্যে সাধারণ ডেটা বা কার্যকলাপ শেয়ার করতে।
- ব্যবহারকারী প্রমাণীকরণ: ব্যবহারকারী লগইন বা লগআউট স্টেট যেমন, টোকেন বা সেশন তথ্য শেয়ার করার জন্য।
- ডেটা ক্যাশিং: API থেকে প্রাপ্ত ডেটা ক্যাশে সংরক্ষণ এবং একাধিক রাউটে ব্যবহার করার জন্য।
- পুনঃব্যবহারযোগ্য ফাংশনালিটি: একই কার্যকলাপ বিভিন্ন স্থান থেকে পুনঃব্যবহার করার জন্য।
Service কিভাবে কাজ করে?
Service তৈরি করতে আপনাকে Ember Service API ব্যবহার করতে হবে, যা Ember.js অ্যাপ্লিকেশনের অন্যান্য অংশের সাথে সহজে কাজ করতে সহায়ক।
১. Service তৈরি করা
Ember CLI ব্যবহার করে আপনি একটি Service তৈরি করতে পারেন:
ember generate service user-auth
এটি app/services/user-auth.js ফাইল তৈরি করবে:
// app/services/user-auth.js
import Service from '@ember/service';
export default class UserAuthService extends Service {
isAuthenticated = false;
login() {
this.isAuthenticated = true;
console.log('User logged in');
}
logout() {
this.isAuthenticated = false;
console.log('User logged out');
}
getAuthStatus() {
return this.isAuthenticated;
}
}
এখানে, UserAuthService একটি সাধারণ Service যা ব্যবহারকারীর লগইন এবং লগআউট স্টেট পরিচালনা করে।
২. Service ইনজেকশন
Ember-এর dependency injection (DI) সিস্টেম ব্যবহার করে Service গুলো অ্যাপ্লিকেশনের বিভিন্ন অংশে ইনজেক্ট করা হয়। আপনি Service গুলো কম্পোনেন্ট, কন্ট্রোলার, বা রাউটে ইনজেক্ট করতে পারেন।
// app/routes/application.js
import Route from '@ember/routing/route';
export default class ApplicationRoute extends Route {
// Service ইনজেক্ট করা
@inject('user-auth') userAuth;
model() {
// Service থেকে ডেটা নেওয়া
return { isAuthenticated: this.userAuth.getAuthStatus() };
}
}
এখানে @inject('user-auth') ব্যবহার করে user-auth Service রাউটের মধ্যে ইনজেক্ট করা হয়েছে এবং model() মেথডে getAuthStatus() ব্যবহার করে সেই Service থেকে ডেটা নেয়া হচ্ছে।
৩. Service ব্যবহার করা
একটি কম্পোনেন্টে Service ব্যবহার করতে:
// app/components/login-status.js
import Component from '@glimmer/component';
import { inject as service } from '@ember/service';
export default class LoginStatusComponent extends Component {
@service('user-auth') userAuth;
get loginStatus() {
return this.userAuth.getAuthStatus() ? 'Logged in' : 'Logged out';
}
}
এখানে, user-auth Service কম্পোনেন্টে ইনজেক্ট করা হয়েছে এবং getAuthStatus() ব্যবহার করে লগইন স্টেট চেক করা হচ্ছে। loginStatus গেটার মাধ্যমে UI-তে স্টেট শো করা হচ্ছে।
৪. Service এর লাইফসাইকেল
Ember Services গুলি singleton হিসেবে কাজ করে, অর্থাৎ এগুলি একবার তৈরি হলে সারা অ্যাপ্লিকেশনে একই ইনস্ট্যান্স শেয়ার করা হয়। এর মানে হল যে একটি Service সবার জন্য শেয়ার করা হয়, এবং এটি প্রজেক্টের যে কোনো স্থান থেকে এক্সেস করা যাবে।
৫. Service ব্যবহারের উদাহরণ
একটি cart Service তৈরি করা:
ember generate service cart
app/services/cart.js:
import Service from '@ember/service';
export default class CartService extends Service {
items = [];
addItem(item) {
this.items.push(item);
}
removeItem(item) {
this.items = this.items.filter(cartItem => cartItem !== item);
}
getItems() {
return this.items;
}
}
এটি একটি cart Service তৈরি করবে যা items অ্যারের মধ্যে প্রোডাক্ট যোগ এবং সরানোর কাজ করবে।
app/components/cart.js:
import Component from '@glimmer/component';
import { inject as service } from '@ember/service';
export default class CartComponent extends Component {
@service('cart') cart;
get items() {
return this.cart.getItems();
}
addItemToCart(item) {
this.cart.addItem(item);
}
removeItemFromCart(item) {
this.cart.removeItem(item);
}
}
এখানে, cart Service কম্পোনেন্টে ইনজেক্ট করা হয়েছে এবং addItem ও removeItem ফাংশন ব্যবহার করে প্রোডাক্ট যোগ এবং সরানো হচ্ছে।
Service এর সুবিধা
- শেয়ারযোগ্যতা: Services গুলো অ্যাপ্লিকেশন জুড়ে পুনঃব্যবহারযোগ্য এবং একাধিক অংশের মধ্যে শেয়ার করা যায়।
- দীর্ঘমেয়াদী স্টেট: Services দীর্ঘমেয়াদী স্টেট (long-lived state) পরিচালনা করতে সক্ষম।
- ডিপেন্ডেন্সি ইনজেকশন: Services-কে সহজে অন্য কম্পোনেন্ট, কন্ট্রোলার বা রাউটের মধ্যে ইনজেক্ট করা যায়।
- কাস্টম লজিক: Service গুলোর মধ্যে অ্যাপ্লিকেশনের বিশেষ কার্যকলাপ (ব্যবহারকারী প্রমাণীকরণ, ডেটা ক্যাশিং, ইত্যাদি) সংরক্ষণ করা যায়।
Ember.js Services অ্যাপ্লিকেশনের মধ্যে পুনঃব্যবহারযোগ্য, শেয়ারযোগ্য, এবং দীর্ঘমেয়াদী স্টেট পরিচালনা করার জন্য একটি শক্তিশালী উপায়। এটি ডিপেন্ডেন্সি ইনজেকশন সিস্টেমের মাধ্যমে অ্যাপ্লিকেশনের বিভিন্ন অংশে সহজেই ইনজেক্ট করা যায়। এটি ডেটা ক্যাশিং, ব্যবহারকারী প্রমাণীকরণ, লগিং এবং অন্যান্য শেয়ারযোগ্য কার্যকলাপ পরিচালনা করতে সহায়ক। Service ব্যবহার করে Ember.js অ্যাপ্লিকেশন ডেভেলপমেন্ট আরও শক্তিশালী, পরিষ্কার এবং কার্যকরী হয়।
Read more