PHP通知をどのようにデカップリングするか
PHP メッセージ通知機能を疎結合にするには、イベント駆動型デザインパターンを検討できます。以下は解耦化を実現するための 1 つの考えられるソリューションです。
- イベントインターフェイスの定義:起こりうるイベントすべてを定義するイベントインターフェイスを作成します。各イベントは、実行時に関連データを渡すために必要な情報を含める必要があります。
interface EventInterface {
public function getData();
}
- イベントリスナーを作成します: 各イベントに1つ以上のリスナーを作成します。リスナーは、特定のイベントを処理するためのコードブロックです。
class EmailNotifier {
public function sendEmail(EventInterface $event) {
// 发送邮件通知
}
}
class SMSNotifier {
public function sendSMS(EventInterface $event) {
// 发送短信通知
}
}
// 创建其他监听器...
- 適切なアプリケーションの場所にイベントリスナーを登録し、イベントが発生したときに対応するリスナーを呼び出せるようにする。
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());
// 注册其他监听器...
- イベントが発生したら適切な場所でイベントを発火させ、関連するデータを流す。
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();
イベント駆動設計パターンを使用することで、ビジネスロジックとメッセージ通知を疎結合にしているため、新しいメッセージ通知方法を追加する場合には、リスナーを作成して登録するだけで、既存のビジネスロジックを変更する必要がない。