Services হল Ember.js এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য, যা অ্যাপ্লিকেশনের বিভিন্ন অংশের মধ্যে ডেটা এবং লজিক শেয়ার করতে ব্যবহৃত হয়। Service সাধারণত অ্যাপ্লিকেশনের এমন ডেটা বা কার্যকলাপ ধারণ করে যা একাধিক কম্পোনেন্ট, কন্ট্রোলার বা রাউটের মধ্যে শেয়ার করা প্রয়োজন।
Services একসাথে বিভিন্ন অংশের মধ্যে শেয়ারযোগ্য লজিক বা ডেটা সরবরাহ করে, যেমন: ইউজার অথেন্টিকেশন, API কল, সেশন ডেটা ইত্যাদি।
এখানে, আমরা Ember.js Services এর মাধ্যমে কিভাবে ডেটা শেয়ার করা যায়, তা ব্যাখ্যা করব।
Ember.js Services এর ভূমিকা
- স্টেট শেয়ারিং:
- Services ব্যবহার করে আপনি অ্যাপ্লিকেশনের বিভিন্ন অংশে একে অপরের সাথে স্টেট শেয়ার করতে পারেন। এক কম্পোনেন্টের মধ্যে পরিবর্তিত স্টেট অন্য কম্পোনেন্টে রিয়েল টাইমে পাওয়া যায়।
- শেয়ারযোগ্য লজিক:
- Services সাধারণত এমন লজিক ধারণ করে যা একাধিক স্থান থেকে ব্যবহৃত হয়। যেমন API কল, ইউজার অথেন্টিকেশন, অথবা লগিং মেকানিজম।
- ডেটা শেয়ারিং:
- বিভিন্ন রাউট, কন্ট্রোলার বা কম্পোনেন্টে ডেটা শেয়ার করতে Services ব্যবহার করা হয়, যা একটি নির্দিষ্ট Service থেকে অন্যান্য অংশে প্রবাহিত হয়।
Ember.js Service তৈরি করা
Ember CLI ব্যবহার করে একটি Service তৈরি করা যায়। উদাহরণস্বরূপ:
ember generate service user-session
এই কমান্ডটি দুটি ফাইল তৈরি করবে:
- app/services/user-session.js: এই ফাইলে service লজিক থাকবে।
- tests/unit/services/user-session-test.js: এই ফাইলটি service টেস্টের জন্য।
Service এর JavaScript কনফিগারেশন
Ember service ক্লাসটি @service ডেকোরেটর ব্যবহার করে তৈরি করা হয়। এখানে একটি উদাহরণ:
// app/services/user-session.js
import Service from '@ember/service';
export default class UserSessionService extends Service {
// Service এর মধ্যে ডেটা
isAuthenticated = false;
user = null;
// ডেটা সেট করার জন্য একটি মেথড
setUser(user) {
this.user = user;
this.isAuthenticated = true;
}
// ডেটা রিসেট করার জন্য একটি মেথড
logout() {
this.user = null;
this.isAuthenticated = false;
}
}
এখানে, UserSessionService একটি isAuthenticated ফ্ল্যাগ এবং user অবজেক্ট ধারণ করছে, যা ইউজারের লগইন স্টেট এবং তথ্য ধারণ করবে।
Service কে Inject করা
Ember.js-এ inject ব্যবহার করে কম্পোনেন্ট, কন্ট্রোলার বা রাউটে Service ইনজেক্ট করা হয়। উদাহরণস্বরূপ:
// app/components/user-profile.js
import Component from '@glimmer/component';
import { inject as service } from '@ember/service';
export default class UserProfileComponent extends Component {
// Service ইনজেক্ট করা
@service userSession;
get userName() {
return this.userSession.user ? this.userSession.user.name : 'Guest';
}
}
এখানে, @service userSession দিয়ে আমরা user-session Service কে কম্পোনেন্টে ইনজেক্ট করেছি এবং কম্পোনেন্টের মধ্যে ডেটা ব্যবহার করেছি। userName গেটারে আমরা userSession থেকে ইউজারের নাম নিয়ে এসেছি।
Service এবং Data Sharing
Services ডেটা শেয়ারিংয়ে গুরুত্বপূর্ণ ভূমিকা পালন করে, কারণ একবার Service এ ডেটা সেট করলে, সেই ডেটা অ্যাপ্লিকেশনের যে কোনো অংশে পাওয়া যেতে পারে যেখানে সেই Service ইনজেক্ট করা হয়েছে।
উদাহরণ: ইউজার সেশন শেয়ারিং
ধরা যাক, আমাদের একটি UserSessionService আছে, যেখানে লগইন স্টেট এবং ইউজারের তথ্য সংরক্ষিত থাকে। আমরা বিভিন্ন কম্পোনেন্ট বা রাউট থেকে এই ডেটা অ্যাক্সেস করতে পারি:
// app/routes/application.js
import Route from '@ember/routing/route';
import { inject as service } from '@ember/service';
export default class ApplicationRoute extends Route {
@service userSession;
beforeModel() {
if (!this.userSession.isAuthenticated) {
this.transitionTo('login'); // লগিন না থাকলে রিডাইরেক্ট করবে
}
}
}
এখানে, ApplicationRoute রাউটে userSession Service ইনজেক্ট করা হয়েছে এবং beforeModel() মেথডের মাধ্যমে ইউজার যদি লগইন না করে থাকে, তবে তা login রাউটে রিডাইরেক্ট করবে।
কম্পোনেন্টে Service ব্যবহার
// app/components/user-profile.js
import Component from '@glimmer/component';
import { inject as service } from '@ember/service';
export default class UserProfileComponent extends Component {
@service userSession;
get userName() {
return this.userSession.user ? this.userSession.user.name : 'No User';
}
}
এখানে, userSession Service ইনজেক্ট করে কম্পোনেন্টে ব্যবহার করা হয়েছে।
Service এর উপকারিতা
- Global State Sharing: Service-এর মাধ্যমে একবার ডেটা সেট করলে তা অ্যাপ্লিকেশনের বিভিন্ন অংশে শেয়ার করা যায়।
- Single Source of Truth: Service এক ধরনের single source of truth হিসেবে কাজ করে। যেখানে ডেটা থাকে, সেখানে পরিবর্তন করলে সেই পরিবর্তন সব স্থানেই প্রতিফলিত হয়।
- Separation of Concerns: Service গুলি বিভিন্ন লজিক একত্রিত করে, যা কোডের বিভাজন এবং পুনঃব্যবহারযোগ্যতা বাড়ায়।
- Async Data Management: Service এর মাধ্যমে API কল বা ডেটার প্রসেসিং সহজে করা যায় এবং ডেটা সহজে শেয়ার করা যায়।
Ember.js Service এর কনফিগারেশন এবং ব্যবহার
Service Ember.js-এ ডেটা শেয়ার এবং ব্যবস্থাপনা করতে ব্যবহৃত হয়, এবং এটি অ্যাপ্লিকেশনের বিভিন্ন অংশের মধ্যে স্টেট শেয়ার করার জন্য আদর্শ। inject ডেকোরেটর ব্যবহার করে আপনি যে কোনো কম্পোনেন্ট, কন্ট্রোলার বা রাউটে Service ইনজেক্ট করে তা ব্যবহার করতে পারেন।
এভাবে, Ember.js Services ডেটা এবং লজিক শেয়ার করার জন্য একটি অত্যন্ত কার্যকরী এবং নমনীয় উপায় প্রদান করে, যা বড় এবং জটিল অ্যাপ্লিকেশন নির্মাণের জন্য অপরিহার্য।
Read more