Subject এর ভূমিকা এবং ব্যবহার

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

313

RxJS (Reactive Extensions for JavaScript) একটি শক্তিশালী লাইব্রেরি যা Observables এর মাধ্যমে অ্যাসিঙ্ক্রোনাস ডেটা স্ট্রিম ম্যানেজ করে। RxJS-এ Subject একটি বিশেষ ধরনের Observable, যা Observer এর মতো আচরণ করে, অর্থাৎ এটি ডেটা গ্রহণ করতে এবং প্রেরণ করতে পারে। Subject মূলত multicasting জন্য ব্যবহৃত হয়, যেখানে একটি একক Observable একাধিক সাবস্ক্রাইবারকে ডেটা পাঠাতে সক্ষম হয়। এটি বিভিন্ন ধরনের event-based বা real-time অ্যাপ্লিকেশন তৈরি করার জন্য অত্যন্ত কার্যকরী।

এই টিউটোরিয়ালে আমরা আলোচনা করবো RxJS Subject এর ভূমিকা, ধরন এবং ব্যবহার।


Subject এর ভূমিকা

Subject একটি বিশেষ ধরনের Observable এবং Observer হিসেবে কাজ করে। এটি এমন একটি observable যা একাধিক সাবস্ক্রাইবারের কাছে একই ডেটা পাঠানোর জন্য multicast করতে সক্ষম। সাধারণত, RxJS-এ যখন একটি Observable তৈরি করা হয়, তা একটিমাত্র সাবস্ক্রাইবারের জন্য ডেটা পাঠায়। কিন্তু Subject এর মাধ্যমে আপনি একাধিক সাবস্ক্রাইবারের কাছে একই ডেটা শেয়ার করতে পারেন।

Subject মূলত তিনটি কাজ করে:

  1. Observer হিসেবে কাজ করে: এটি next(), error(), এবং complete() মেথড ব্যবহার করে ডেটা পাঠাতে পারে।
  2. Observable হিসেবে কাজ করে: এটি অন্যান্য সাবস্ক্রাইবারদের কাছ থেকে ডেটা গ্রহণ করে এবং তাদের জানায়।
  3. Multicasting: একাধিক সাবস্ক্রাইবার একই ডেটা শেয়ার করতে পারে।

Subject এর ধরন

RxJS-এ মোট ৪ ধরনের Subject রয়েছে, যার প্রত্যেকটির নিজস্ব কার্যক্রম রয়েছে:

1. Basic Subject

Basic Subject একটি সাধারণ Subject, যা multicast করে এবং একাধিক সাবস্ক্রাইবারের কাছে ডেটা পাঠায়। এটি সাধারণত যখন কোনো ডেটার প্রবাহ একাধিক সাবস্ক্রাইবারকে শেয়ার করতে হয়, তখন ব্যবহার করা হয়।

উদাহরণ: Basic Subject

import { Subject } from 'rxjs';

const subject = new Subject();

// Subscriber 1
subject.subscribe(value => {
  console.log('Subscriber 1:', value);
});

// Subscriber 2
subject.subscribe(value => {
  console.log('Subscriber 2:', value);
});

subject.next('Hello');
subject.next('World');

আউটপুট:

Subscriber 1: Hello
Subscriber 2: Hello
Subscriber 1: World
Subscriber 2: World

এখানে, Subject একাধিক সাবস্ক্রাইবারকে একই ডেটা শেয়ার করছে। যখন subject.next() কল করা হয়, তখন সব সাবস্ক্রাইবার সেই মানটি গ্রহণ করে।

2. BehaviorSubject

BehaviorSubject এমন একটি Subject যা সর্বশেষ emitted মানটি সংরক্ষণ করে রাখে এবং নতুন সাবস্ক্রাইবাররা সেই মানটি পায়। এটি একটি initial value গ্রহণ করে এবং সাবস্ক্রাইবারদের কাছে সেই মানটি ফেরত পাঠায়।

উদাহরণ: BehaviorSubject

import { BehaviorSubject } from 'rxjs';

const subject = new BehaviorSubject('Initial Value');

// Subscriber 1
subject.subscribe(value => {
  console.log('Subscriber 1:', value);
});

// Emitting new value
subject.next('New Value');

// Subscriber 2 (gets the last emitted value)
subject.subscribe(value => {
  console.log('Subscriber 2:', value);
});

আউটপুট:

Subscriber 1: Initial Value
Subscriber 1: New Value
Subscriber 2: New Value

এখানে, BehaviorSubject প্রথমে 'Initial Value' পাঠায় এবং তারপর 'New Value' যখন emits করা হয়, তখন নতুন সাবস্ক্রাইবারও সর্বশেষ মান 'New Value' পায়।

3. ReplaySubject

ReplaySubject পূর্ববর্তী n সংখ্যক মান সংরক্ষণ করে রাখে এবং যখন কোনো নতুন সাবস্ক্রাইবার আসে, তখন সেগুলির সবগুলো পুনরায় পাঠায়। এটি historical values সংরক্ষণ করে এবং পুনরায় পাঠানোর জন্য ব্যবহৃত হয়।

উদাহরণ: ReplaySubject

import { ReplaySubject } from 'rxjs';

const subject = new ReplaySubject(2); // Keep the last 2 emitted values

// Emitting values
subject.next('Value 1');
subject.next('Value 2');
subject.next('Value 3');

// Subscriber 1
subject.subscribe(value => {
  console.log('Subscriber 1:', value);
});

// Subscriber 2 (will receive the last 2 emitted values)
subject.subscribe(value => {
  console.log('Subscriber 2:', value);
});

আউটপুট:

Subscriber 1: Value 3
Subscriber 2: Value 2
Subscriber 2: Value 3

এখানে, ReplaySubject(2) সর্বশেষ দুটি মান 'Value 2' এবং 'Value 3' সংরক্ষণ করে এবং নতুন সাবস্ক্রাইবারে পাঠায়।

4. AsyncSubject

AsyncSubject শুধুমাত্র শেষ emitted value পাঠায়, যখন complete() কল করা হয়। এটি শেষ মানটিকে সাবস্ক্রাইবারে পাঠানোর আগে সব ইভেন্টের প্রসেসিং শেষ করতে সহায়তা করে।

উদাহরণ: AsyncSubject

import { AsyncSubject } from 'rxjs';

const subject = new AsyncSubject();

// Subscriber 1
subject.subscribe(value => {
  console.log('Subscriber 1:', value);
});

// Emitting values
subject.next('Value 1');
subject.next('Value 2');

// Complete the subject, after which the last emitted value is sent to subscribers
subject.complete(); // The last emitted value is sent to Subscriber 1

আউটপুট:

Subscriber 1: Value 2

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


3. Subject এর ব্যবহার

RxJS-এ Subject এর মাধ্যমে আপনি multicast করতে পারেন এবং একাধিক সাবস্ক্রাইবারকে একসাথে ডেটা পাঠাতে পারেন। এটি ব্যবহার করে, আপনি ইভেন্টগুলিকে সহজে প্রেরণ করতে পারেন এবং তাদের উপর কার্যকলাপ পরিচালনা করতে পারেন।

Example: Real-time Event Management with Subject

import { Subject } from 'rxjs';

const subject = new Subject();

// Event listener for user input
document.getElementById('input').addEventListener('input', (event) => {
  subject.next(event.target.value); // Emit the input value
});

// Subscriber 1
subject.subscribe(value => {
  console.log('Subscriber 1:', value);
});

// Subscriber 2
subject.subscribe(value => {
  console.log('Subscriber 2:', value);
});

এখানে, Subject ব্যবহার করে আমরা input ইভেন্টের পরিবর্তনগুলিকে দুটি সাবস্ক্রাইবারের কাছে শেয়ার করছি।


সারাংশ

RxJS Subject এর প্রধান ভূমিকা হল multicasting—একটি একক Observable থেকে একাধিক সাবস্ক্রাইবারকে ডেটা শেয়ার করা। RxJS-এর মধ্যে বিভিন্ন ধরনের Subject রয়েছে, যেমন:

  1. Basic Subject: একটি সাধারণ Subject যা একাধিক সাবস্ক্রাইবারকে একই ডেটা পাঠায়।
  2. BehaviorSubject: সর্বশেষ মান সংরক্ষণ করে রাখে এবং নতুন সাবস্ক্রাইবারদের সেই মান পাঠায়।
  3. ReplaySubject: আগের মানগুলি সংরক্ষণ করে রাখে এবং সাবস্ক্রাইবারকে পাঠায়।
  4. AsyncSubject: শুধু শেষ মানটি পাঠায় যখন complete() কল হয়।

Subject এর মাধ্যমে RxJS স্ট্রিমগুলিকে আরও কার্যকরভাবে এবং সহজে ম্যানেজ করা সম্ভব হয়, বিশেষত যখন আপনি একাধিক সাবস্ক্রাইবারের কাছে একই ডেটা পাঠাতে চান বা ইভেন্ট-ভিত্তিক সিস্টেম তৈরি করতে চান।

Content added By
Promotion

Are you sure to start over?

Loading...