PHP通知をどのようにデカップリングするか

PHP メッセージ通知機能を疎結合にするには、イベント駆動型デザインパターンを検討できます。以下は解耦化を実現するための 1 つの考えられるソリューションです。

  1. イベントインターフェイスの定義:起こりうるイベントすべてを定義するイベントインターフェイスを作成します。各イベントは、実行時に関連データを渡すために必要な情報を含める必要があります。
interface EventInterface {
    public function getData();
}
  1. イベントリスナーを作成します: 各イベントに1つ以上のリスナーを作成します。リスナーは、特定のイベントを処理するためのコードブロックです。
class EmailNotifier {
    public function sendEmail(EventInterface $event) {
        // 发送邮件通知
    }
}

class SMSNotifier {
    public function sendSMS(EventInterface $event) {
        // 发送短信通知
    }
}

// 创建其他监听器...
  1. 適切なアプリケーションの場所にイベントリスナーを登録し、イベントが発生したときに対応するリスナーを呼び出せるようにする。
class EventDispatcher {
    private $listeners = [];

    public function addListener($eventName, $listener) {
        $this->listeners[$eventName][] = $listener;
    }

    public function dispatch($eventName, EventInterface $event) {
        if (isset($this->listeners[$eventName])) {
            foreach ($this->listeners[$eventName] as $listener) {
                $listener->$eventName($event);
            }
        }
    }
}

$dispatcher = new EventDispatcher();
$dispatcher->addListener('event1', new EmailNotifier());
$dispatcher->addListener('event1', new SMSNotifier());

// 注册其他监听器...
  1. イベントが発生したら適切な場所でイベントを発火させ、関連するデータを流す。
class EventGenerator {
    private $dispatcher;

    public function __construct(EventDispatcher $dispatcher) {
        $this->dispatcher = $dispatcher;
    }

    public function doSomething() {
        // 执行操作...

        // 触发事件
        $event = new Event1($data);
        $this->dispatcher->dispatch('event1', $event);
    }
}

// 创建其他事件...

$dispatcher = new EventDispatcher();
$eventGenerator = new EventGenerator($dispatcher);
$eventGenerator->doSomething();

イベント駆動設計パターンを使用することで、ビジネスロジックとメッセージ通知を疎結合にしているため、新しいメッセージ通知方法を追加する場合には、リスナーを作成して登録するだけで、既存のビジネスロジックを変更する必要がない。

bannerAds