Event Bus और Observer पैटर्न PHP में: कोड के साथ सीखें

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

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

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

PHP में Event Bus और Observer पैटर्न: थ्योरी से प्रैक्टिस तक

आधुनिक PHP डेवलपमेंट में हमेशा ऐसे सिस्टम बनाने की ज़रूरत होती है जो कम जुड़े हुए (loosely coupled), लचीले और आसानी से बढ़ाए जा सकने वाले हों। इस लक्ष्य को पाने के लिए दो मुख्य टूल हैं — Observer पैटर्न और इसका अधिक उन्नत रूप Event Bus (इवेंट बस)। इस लेख में हम PHP में दोनों तरीकों को लागू करना सीखेंगे और जानेंगे कि कब किस टूल का उपयोग करना चाहिए।

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

Observer (ऑब्ज़र्वर) पैटर्न एक बिहेवियरल डिज़ाइन पैटर्न है जो ऑब्जेक्ट्स के बीच 'एक-से-अनेक' (one-to-many) संबंध बनाता है। जब एक ऑब्जेक्ट (पब्लिशर) अपनी स्थिति बदलता है, तो सभी आश्रित ऑब्जेक्ट्स (सब्सक्राइबर्स) को अपने आप सूचित कर दिया जाता है।

PHP में Observer की सरल रूपरेखा:

<?php
interface Observer {
    public function update(string $event, $data): void;
}

interface Observable {
    public function attach(Observer $observer): void;
    public function detach(Observer $observer): void;
    public function notify(string $event, $data = null): void;
}

class UserManager implements Observable {
    private array $observers = [];

    public function attach(Observer $observer): void {
        $this->observers[] = $observer;
    }

    public function detach(Observer $observer): void {
        $this->observers = array_filter(
            $this->observers,
            fn($obs) => $obs !== $observer
        );
    }

    public function notify(string $event, $data = null): void {
        foreach ($this->observers as $observer) {
            $observer->update($event, $data);
        }
    }

    public function registerUser(string $name): void {
        // रजिस्ट्रेशन की लॉजिक
        echo "उपयोगकर्ता $name रजिस्टर हो गया।\n";
        $this->notify('user.registered', ['name' => $name]);
    }
}

class EmailNotifier implements Observer {
    public function update(string $event, $data): void {
        if ($event === 'user.registered') {
            echo "{$data['name']} के लिए स्वागत ईमेल भेजा जा रहा है।\n";
        }
    }
}

class Logger implements Observer {
    public function update(string $event, $data): void {
        echo "इवेंट लॉग किया जा रहा है: $event\n";
    }
}

// उपयोग
$userManager = new UserManager();
$userManager->attach(new EmailNotifier());
$userManager->attach(new Logger());

$userManager->registerUser('राजेश');
?>

क्लासिकल Observer की कमियाँ

  • मजबूत निर्भरता — सब्सक्राइबर्स को पब्लिशर के बारे में जानना ज़रूरी है।
  • लचीलेपन की कमी — कई अलग-अलग इवेंट्स को मैनेज करना मुश्किल होता है।
  • टेस्टिंग में दिक्कत — हर पब्लिशर में ऑब्ज़र्वर्स की लिस्ट होती है।

Event Bus — Observer पैटर्न का विकसित रूप

Event Bus (इवेंट बस) इवेंट पब्लिशर्स और उनके सब्सक्राइबर्स के बीच एक केंद्रीय मध्यस्थ (central mediator) है। हर पब्लिशर ऑब्जेक्ट को खुद ऑब्ज़र्वर्स की लिस्ट मैनेज करने की बजाय, सभी सब्सक्रिप्शन और नोटिफिकेशन एक ही बस के ज़रिए होते हैं।

PHP में Event Bus को लागू करना

<?php
class EventBus {
    private array $listeners = [];

    public function subscribe(string $event, callable $handler): void {
        $this->listeners[$event][] = $handler;
    }

    public function unsubscribe(string $event, callable $handler): void {
        if (!isset($this->listeners[$event])) {
            return;
        }
        $this->listeners[$event] = array_filter(
            $this->listeners[$event],
            fn($h) => $h !== $handler
        );
    }

    public function dispatch(string $event, $payload = null): void {
        if (!isset($this->listeners[$event])) {
            return;
        }
        foreach ($this->listeners[$event] as $handler) {
            call_user_func($handler, $payload);
        }
    }
}

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

// इवेंट पर सब्सक्राइब करना                    

अनुशंसाएँ