Subjects এর মাধ্যমে ডেটা শেয়ার করা

Subjects এবং Behaviors - আরএক্সজেএস (RxJS) - Web Development

238

RxJS-এ Subject একটি বিশেষ ধরনের Observable যা শুধু ডেটা গ্রহণই নয়, সেই ডেটা অন্যান্য সাবস্ক্রাইবারদের মধ্যে শেয়ার করার জন্য ব্যবহৃত হয়। সাধারনত, একটি Observable ডেটা শুধুমাত্র সাবস্ক্রাইবারদের জন্য পাঠায়, কিন্তু Subject এমন একটি Observable যা একাধিক সাবস্ক্রাইবারের মধ্যে ডেটা শেয়ার করতে পারে। এটি পুশ এবং পুল মডেল দুটোই সাপোর্ট করে।

RxJS Subjects একাধিক প্রকারে আসে, এবং তাদের ব্যবহার কিছুটা আলাদা হতে পারে, তবে সাধারণভাবে এটি ডেটা শেয়ার এবং কমিউনিকেশন হ্যান্ডলিংয়ের জন্য খুবই উপকারী।


Subject কী?

Subject হল একটি বিশেষ ধরনের Observable, যা নিজে থেকে ডেটা তৈরি না করে, বরং এটি ডেটা push করে দেয় সমস্ত সাবস্ক্রাইবারদের কাছে। এটি আপনাকে একই ডেটা একাধিক সাবস্ক্রাইবারের মধ্যে শেয়ার করতে সাহায্য করে। আপনি যে কোন সময় একটি Subject তে নতুন মান পাঠাতে পারেন এবং তা সমস্ত সক্রিয় সাবস্ক্রাইবারদের কাছে পৌঁছাবে।


Subject ব্যবহার

আমরা নিচে একটি সাধারণ উদাহরণ দেখবো যেখানে একটি Subject ব্যবহার করা হবে, যা একাধিক সাবস্ক্রাইবারের মধ্যে ডেটা শেয়ার করবে।

১. Subject তৈরি ও ব্যবহার

import { Subject } from 'rxjs';

// একটি Subject তৈরি করা
const subject = new Subject();

// প্রথম সাবস্ক্রাইবার যোগ করা
subject.subscribe({
  next: (value) => console.log('Subscriber 1 received: ', value)
});

// দ্বিতীয় সাবস্ক্রাইবার যোগ করা
subject.subscribe({
  next: (value) => console.log('Subscriber 2 received: ', value)
});

// Subject তে মান পুশ করা
subject.next('Hello, RxJS!');  // এই মানটি সমস্ত সাবস্ক্রাইবারদের কাছে যাবে
subject.next('Welcome to Subjects!');

২. কোড ব্যাখ্যা

  • Subject: এখানে আমরা একটি Subject তৈরি করেছি, যা next() ফাংশন ব্যবহার করে ডেটা পুশ করবে।
  • subscribe(): দুইটি সাবস্ক্রাইবার যোগ করেছি। যখনই subject.next() কল করা হবে, তখন এই মানটি দুটি সাবস্ক্রাইবারের কাছে পৌঁছাবে।
  • next(): এই ফাংশনের মাধ্যমে আমরা Subject তে ডেটা পাঠাচ্ছি, যা সমস্ত সাবস্ক্রাইবারদের কাছে চলে যাবে।

৩. আউটপুট

যখন উপরের কোডটি চালানো হবে, তখন কনসোলে আউটপুট হবে:

Subscriber 1 received:  Hello, RxJS!
Subscriber 2 received:  Hello, RxJS!
Subscriber 1 received:  Welcome to Subjects!
Subscriber 2 received:  Welcome to Subjects!

Subject এর প্রকারভেদ

RxJS এ বিভিন্ন ধরনের Subject রয়েছে, যা বিভিন্ন পরিস্থিতিতে ব্যবহৃত হতে পারে। নিচে তাদের কিছু গুরুত্বপূর্ণ প্রকার আলোচনা করা হলো:

১. BehaviorSubject

BehaviorSubject এমন একটি Subject যা সর্বদা সর্বশেষ পাঠানো মানটি ধারণ করে এবং নতুন সাবস্ক্রাইবারদের কাছে এটি সর্বশেষ মান পাঠায়। এটি সাধারণত ব্যবহৃত হয় যেখানে আপনি সর্বশেষ মানের অবস্থা শেয়ার করতে চান।

import { BehaviorSubject } from 'rxjs';

// একটি BehaviorSubject তৈরি করা
const behaviorSubject = new BehaviorSubject('Initial Value');

// সাবস্ক্রাইবার যোগ করা
behaviorSubject.subscribe({
  next: (value) => console.log('Subscriber received: ', value)
});

// নতুন মান পুশ করা
behaviorSubject.next('New Value');

এখানে, প্রথম সাবস্ক্রাইবার যখন BehaviorSubject-এ সাবস্ক্রাইব করবে, তখন এটি সর্বশেষ মান "Initial Value" পাবে। এরপর যে কোন নতুন মান যোগ করলে, সেই মানটি সমস্ত সাবস্ক্রাইবারের কাছে পৌঁছে যাবে।

২. ReplaySubject

ReplaySubject এমন একটি Subject যা সাবস্ক্রাইবারদের কাছে অতীতের সমস্ত মান পুনরায় পাঠায়। আপনি এটি ব্যবহার করতে পারেন যখন আপনি চান সাবস্ক্রাইবাররা সব পুরানো মান দেখতে পাবে।

import { ReplaySubject } from 'rxjs';

// একটি ReplaySubject তৈরি করা
const replaySubject = new ReplaySubject(2); // সর্বশেষ ২টি মানই রেকর্ড হবে

// প্রথম সাবস্ক্রাইবার যোগ করা
replaySubject.subscribe({
  next: (value) => console.log('Subscriber 1 received: ', value)
});

// মান পুশ করা
replaySubject.next('First Value');
replaySubject.next('Second Value');
replaySubject.next('Third Value');

// দ্বিতীয় সাবস্ক্রাইবার যোগ করা
replaySubject.subscribe({
  next: (value) => console.log('Subscriber 2 received: ', value)
});

এখানে, দ্বিতীয় সাবস্ক্রাইবার সাবস্ক্রাইব করার পর, এটি সর্বশেষ দুটি মান (Second Value এবং Third Value) পাবো, যেহেতু ReplaySubject সর্বশেষ দুটি মান মেমোরিতে রাখে।

৩. AsyncSubject

AsyncSubject একটি বিশেষ ধরনের Subject যা শুধুমাত্র complete() হওয়ার পর শেষ মানটি পাঠায়। এটি সাধারণত ব্যবহৃত হয় যেখানে আপনি শুধুমাত্র শেষ মানের প্রতি আগ্রহী।

import { AsyncSubject } from 'rxjs';

// একটি AsyncSubject তৈরি করা
const asyncSubject = new AsyncSubject();

// সাবস্ক্রাইবার যোগ করা
asyncSubject.subscribe({
  next: (value) => console.log('Subscriber received: ', value)
});

// মান পুশ করা
asyncSubject.next('First Value');
asyncSubject.next('Second Value');
asyncSubject.next('Third Value');

// শেষ মান পাঠানো এবং complete করা
asyncSubject.complete();

এখানে, AsyncSubject শুধুমাত্র complete() কল হওয়ার পর "Third Value" মানটি সাবস্ক্রাইবারকে পাঠাবে।


সারাংশ

RxJS Subjects হল একাধিক সাবস্ক্রাইবারের মধ্যে ডেটা শেয়ার করার জন্য একটি শক্তিশালী উপায়। সাধারণ Observable এর তুলনায়, Subjects আপনাকে ডেটা push করার মাধ্যমে সেটি একাধিক সাবস্ক্রাইবারের কাছে পৌঁছাতে সহায়তা করে। RxJS-এ বিভিন্ন ধরনের Subject থাকে, যেমন BehaviorSubject, ReplaySubject, এবং AsyncSubject, প্রতিটি তাদের নিজস্ব ব্যবহারের ক্ষেত্র অনুযায়ী কাজ করে। এগুলি একত্রে ব্যবহার করে আপনি অ্যাসিঙ্ক্রোনাস ডেটা স্ট্রিম এবং ইভেন্ট হ্যান্ডলিং আরও সহজভাবে পরিচালনা করতে পারবেন।

Content added By
Promotion

Are you sure to start over?

Loading...