Event Aggregator ব্যবহার করে কম্পোনেন্ট ইন্টারঅ্যাকশন

কাস্টম ইভেন্টস এবং কম্পোনেন্ট ইন্টারঅ্যাকশন - অরেলিয়া Aurelia) - Web Development

315

Aurelia-তে Event Aggregator একটি শক্তিশালী প্যাটার্ন যা বিভিন্ন কম্পোনেন্টের মধ্যে ইভেন্ট-বেসড কমিউনিকেশন তৈরি করতে সহায়তা করে। এটি কম্পোনেন্টগুলোর মধ্যে ডিকপ্লেপড (decoupled) ইন্টারঅ্যাকশন তৈরি করতে ব্যবহৃত হয়, যাতে এক কম্পোনেন্ট অন্য কম্পোনেন্টের সরাসরি রেফারেন্স না নিয়ে সহজেই তথ্য বা ইভেন্ট শেয়ার করতে পারে।

Event Aggregator কী?

Event Aggregator হল একটি প্যাটার্ন যা এক বা একাধিক কম্পোনেন্টের মধ্যে ইভেন্ট বা ডেটা শেয়ার করার জন্য ব্যবহৃত হয়। এটি মূলত একটি পাবলিশ-সাবস্ক্রাইব মেকানিজম ব্যবহার করে, যেখানে এক কম্পোনেন্ট (পাবলিশার) একটি ইভেন্ট বা ডেটা প্রকাশ করে এবং অন্য কম্পোনেন্ট (সাবস্ক্রাইবার) সেই ইভেন্টে সাড়া দেয়।

Aurelia-তে, EventAggregator ক্লাস দিয়ে আমরা ইভেন্টগুলি ম্যানেজ করি এবং বিভিন্ন কম্পোনেন্টে তা পাঠাতে বা গ্রহণ করতে পারি।


১. Event Aggregator সেটআপ এবং ব্যবহার

Step 1: Event Aggregator ইনস্টল করা

Aurelia-তে EventAggregator ক্লাসটি aurelia-event-aggregator প্যাকেজের অংশ। এটি Aurelia CLI দ্বারা ডিফল্টভাবে ইনস্টল করা হয়। তবে যদি এটি আপনার প্রজেক্টে ইনস্টল না থাকে, তবে আপনি এটি npm এর মাধ্যমে ইনস্টল করতে পারেন:

npm install aurelia-event-aggregator

Step 2: EventAggregator ক্লাস ইনজেক্ট করা

আপনি যেকোনো কম্পোনেন্টে EventAggregator ক্লাস ইনজেক্ট করে তা ব্যবহার করতে পারেন। উদাহরণস্বরূপ, একটি কম্পোনেন্টের মধ্যে এটি ইনজেক্ট করা যেতে পারে:

import { inject } from 'aurelia-framework';
import { EventAggregator } from 'aurelia-event-aggregator';

@inject(EventAggregator)
export class Sender {
  constructor(eventAggregator) {
    this.eventAggregator = eventAggregator;
  }

  sendMessage() {
    this.eventAggregator.publish('message-sent', 'Hello from Sender!');
  }
}

এখানে, Sender কম্পোনেন্টে eventAggregator.publish() ব্যবহার করে একটি ইভেন্ট প্রকাশ করা হচ্ছে যার নাম message-sent এবং সাথে একটি বার্তা পাঠানো হচ্ছে।

Step 3: Event শুনতে (Subscribe)

এখন, যে কম্পোনেন্টটি ইভেন্টটি গ্রহণ করবে, সে কম্পোনেন্টে eventAggregator.subscribe() ব্যবহার করা হয়।

import { inject } from 'aurelia-framework';
import { EventAggregator } from 'aurelia-event-aggregator';

@inject(EventAggregator)
export class Receiver {
  constructor(eventAggregator) {
    this.eventAggregator = eventAggregator;
    this.message = '';
  }

  attached() {
    this.subscription = this.eventAggregator.subscribe('message-sent', message => {
      this.message = message;
    });
  }

  detached() {
    this.subscription.dispose(); // সাবস্ক্রিপশনটি বন্ধ করা
  }
}

এখানে, Receiver কম্পোনেন্টে message-sent ইভেন্ট সাবস্ক্রাইব করা হয়েছে এবং যখন এই ইভেন্টটি ট্রিগার হয়, তখন এটি message ভেরিয়েবলে ডেটা আপডেট করবে। attached() মেথডে ইভেন্ট সাবস্ক্রাইব করা হয় এবং detached() মেথডে সাবস্ক্রিপশনটি ক্লিনআপ করা হয়।


২. কম্পোনেন্ট ইন্টারঅ্যাকশন উদাহরণ

ধরা যাক, আমাদের একটি Sender কম্পোনেন্ট আছে যা একটি বার্তা পাঠায় এবং Receiver কম্পোনেন্ট রয়েছে যা সেই বার্তা গ্রহণ করে এবং প্রদর্শন করে।

Sender কম্পোনেন্ট (ফর্মে একটি বার্তা পাঠানো)

sender.html:

<template>
  <h2>Send Message</h2>
  <button click.delegate="sendMessage()">Send Message</button>
</template>

sender.js:

import { inject } from 'aurelia-framework';
import { EventAggregator } from 'aurelia-event-aggregator';

@inject(EventAggregator)
export class Sender {
  constructor(eventAggregator) {
    this.eventAggregator = eventAggregator;
  }

  sendMessage() {
    this.eventAggregator.publish('message-sent', 'Hello, this is a message from Sender!');
  }
}

Receiver কম্পোনেন্ট (বার্তা গ্রহণ করা)

receiver.html:

<template>
  <h2>Received Message:</h2>
  <p>${message}</p>
</template>

receiver.js:

import { inject } from 'aurelia-framework';
import { EventAggregator } from 'aurelia-event-aggregator';

@inject(EventAggregator)
export class Receiver {
  constructor(eventAggregator) {
    this.eventAggregator = eventAggregator;
    this.message = '';
  }

  attached() {
    this.subscription = this.eventAggregator.subscribe('message-sent', message => {
      this.message = message;
    });
  }

  detached() {
    this.subscription.dispose();
  }
}

Main View (প্রধান ভিউ যাতে দুটি কম্পোনেন্ট দেখানো হয়)

app.html:

<template>
  <require from="sender"></require>
  <require from="receiver"></require>

  <sender></sender>
  <receiver></receiver>
</template>

এখানে, Sender কম্পোনেন্টে বাটন ক্লিক করলে message-sent ইভেন্ট পাবলিশ হবে এবং Receiver কম্পোনেন্টে সেই ইভেন্ট সাবস্ক্রাইব করে বার্তা গ্রহণ করে দেখাবে।


৩. ইভেন্ট এগ্রিগেটরের শক্তিশালী ব্যবহার

Aurelia-তে EventAggregator এর মাধ্যমে আপনি একাধিক কম্পোনেন্টের মধ্যে ইভেন্ট শেয়ার করতে পারেন এবং এতে একে অপরের উপর নির্ভর না হয়ে কম্পোনেন্টগুলোর মধ্যে কার্যকরী যোগাযোগ স্থাপন করতে পারেন।

এটি বিশেষ করে ব্যবহারকারী ইন্টারফেসের বিভিন্ন অংশের মধ্যে ইন্টারঅ্যাকশন পরিচালনা করতে খুবই উপকারী। উদাহরণস্বরূপ:

  • এক কম্পোনেন্টের ইনপুট অন্য কম্পোনেন্টে প্রভাব ফেলবে।
  • একটি কম্পোনেন্টে একটি পরিবর্তন ঘটলে অন্য কম্পোনেন্ট তা গ্রহণ করবে এবং UI আপডেট হবে।
  • একটি কম্পোনেন্টে একাধিক সাবস্ক্রিপশন এবং পাবলিশিং হতে পারে।

৪. বিশেষ ব্যবহার পরিস্থিতি

১. গ্লোবাল ইভেন্ট শেয়ার করা

Aurelia EventAggregator একটি গ্লোবাল ইভেন্ট বাস হিসাবে কাজ করে, যা পুরো অ্যাপ্লিকেশনে ইভেন্ট শেয়ার করতে সহায়তা করে। উদাহরণস্বরূপ, আপনি একটি এক্সেসযোগ্য notification system বা global state শেয়ার করার জন্য এটি ব্যবহার করতে পারেন।

২. কম্পোনেন্ট-ভিত্তিক ইভেন্ট শেয়ারিং

Aurelia-তে EventAggregator ব্যবহার করে আপনি খুব সহজেই কম্পোনেন্টগুলোর মধ্যে ডেটা শেয়ার এবং ম্যানেজ করতে পারবেন, যেখানে একটি কম্পোনেন্ট একটি ইভেন্ট পাবলিশ করে এবং অন্য কম্পোনেন্ট সেই ইভেন্ট সাবস্ক্রাইব করে তথ্য গ্রহণ করবে।


উপসংহার

Aurelia-তে Event Aggregator ব্যবহার করে আপনি কম্পোনেন্ট ইন্টারঅ্যাকশন সহজে এবং শক্তিশালীভাবে পরিচালনা করতে পারেন। এটি পাবলিশ-সাবস্ক্রাইব প্যাটার্ন ব্যবহার করে কম্পোনেন্টগুলোর মধ্যে যোগাযোগ সক্ষম করে, যেখানে এক কম্পোনেন্ট অন্য কম্পোনেন্টের রেফারেন্স ছাড়াই তথ্য বা ইভেন্ট শেয়ার করতে পারে। Aurelia-তে Event Aggregator ব্যবহার করার মাধ্যমে আপনার অ্যাপ্লিকেশনে ডিকপ্লেপড এবং সুন্দর কোড লেখা সম্ভব হয়, যা বড় অ্যাপ্লিকেশনগুলোর জন্য বিশেষভাবে কার্যকর।

Content added By
Promotion

Are you sure to start over?

Loading...