Event Bus और Observer पैटर्न JavaScript (Node.js) में — लचीली इवेंट-आधारित प्रणालियों का निर्माण

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Event Bus और Observer पैटर्न JavaScript (Node.js) में

Node.js पर आधुनिक विकास में, अक्सर एप्लिकेशन के विभिन्न घटकों के बीच बातचीत को व्यवस्थित करने की आवश्यकता होती है, बिना उनके बीच कठोर संबंध बनाए। Observer पैटर्न (प्रेक्षक) और इसका अधिक शक्तिशाली कार्यान्वयन — Event Bus (इवेंट बस) — इस समस्या का एक सुरुचिपूर्ण समाधान प्रदान करते हैं। इस लेख में, हम विस्तार से समझेंगे कि Node.js वातावरण में शुद्ध JavaScript में इन पैटर्न को कैसे लागू किया जाए, उनके लाभों और विशिष्ट उपयोग परिदृश्यों पर विचार करेंगे।



Observer पैटर्न क्या है?

Observer पैटर्न वस्तुओं के बीच "एक-से-अनेक" संबंध को परिभाषित करता है: जब एक वस्तु (विषय) अपनी स्थिति बदलती है, तो उस पर निर्भर सभी वस्तुओं (प्रेक्षकों) को स्वचालित रूप से सूचित किया जाता है। Node.js के संदर्भ में, यह पैटर्न अंतर्निहित मॉड्यूल events का आधार है, जो EventEmitter वर्ग प्रदान करता है।



Event Bus: अवधारणा का विस्तार

Event Bus एक केंद्रीकृत इवेंट बस है, जो एप्लिकेशन के किसी भी घटक को एक-दूसरे को सीधे जाने बिना संदेश भेजने और प्राप्त करने की अनुमति देती है। यह माइक्रोसर्विस आर्किटेक्चर, मॉड्यूलर संरचना वाले जटिल एप्लिकेशन या प्लगइन सिस्टम बनाते समय विशेष रूप से उपयोगी है।



Node.js पर Event Bus का कार्यान्वयन

आइए शुरू से अपना स्वयं का Event Bus बनाने पर विचार करें। हमारा वर्ग बुनियादी विधियों का समर्थन करेगा: इवेंट की सदस्यता (on), एक बार की सदस्यता (once), सब्सक्राइबर को हटाना (off) और इवेंट का उत्सर्जन (emit)।



class EventBus {    constructor() {        this.events = {};    }

on(event, listener) { if (!this.events[event]) { this.events[event] = []; } this.events[event].push(listener); return () => this.off(event, listener); }

once(event, listener) { const wrapper = (...args) => { listener(...args); this.off(event, wrapper); }; this.on(event, wrapper); return () => this.off(event, wrapper); }

off(event, listener) { if (!this.events[event]) return; this.events[event] = this.events[event].filter(l => l !== listener); }

emit(event, ...args) { if (!this.events[event]) return false; this.events[event].forEach(listener => listener(...args)); return true; }}

// उपयोग का उदाहरणconst bus = new EventBus();

const unsubscribe = bus.on('user:login', (username) => { console.log(`उपयोगकर्ता ${username} सिस्टम में लॉग इन हुआ`);});

bus.once('app:start', () => { console.log('एप्लिकेशन प्रारंभ हुआ (एक बार की सूचना)');});

// इवेंट का उत्सर्जनbus.emit('app:start'); // "एप्लिकेशन प्रारंभ हुआ (एक बार की सूचना)"bus.emit('user:login', 'अन्ना'); // "उपयोगकर्ता अन्ना सिस्टम में लॉग इन हुआ"

// सदस्यता समाप्त करनाunsubscribe();bus.emit('user:login', 'इवान'); // कुछ नहीं होगा


Node.js से अंतर्निहित EventEmitter का उपयोग

Node.js मॉड्यूल events में EventEmitter का तैयार कार्यान्वयन प्रदान करता है। हालाँकि, इसके आधार पर बनाया गया Event Bus, एप्लिकेशन के सभी इवेंट को केंद्रीय रूप से प्रबंधित करने की अनुमति देता है।



const EventEmitter = require('events');

class AppEventBus extends EventEmitter { constructor() { super(); this.setMaxListeners(50); // सब्सक्राइबर की सीमा बढ़ाएँ }

// डिबगिंग के लिए लॉगिंग जोड़ें emit(event, ...args) { console.log(`[EventBus] इवेंट: ${event}`); return super.emit(event, ...args); }}

const appBus = new AppEventBus();

// इवेंट की सदस्यताappBus.on('order:created', (order) => { console.log(`ऑर्डर #${order.id} बनाया गया। सूचना भेज रहे हैं।`);});

appBus.on('order:created', (order) => { console.log(`ऑर्डर #${order.id} बनाया गया। स्टॉक अपडेट कर रहे हैं।`);});

// उत्सर्जनappBus.emit('o

अनुशंसाएँ