называя события Laravel, слушателей и рабочие места

У меня есть событие под названием UserWasRegistered Также у меня есть слушатель по имени UserWasRegistered оттуда я решил разработать рабочие команды под названием:

EmailRegistrationConfirmation

NotifyAdminsNewRegistration

CreateNewBillingAccount

Все эти работы будут выполнены в течение UserWasRegistered класс слушателя событий.

Это правильный подход, или я просто должен иметь несколько слушателей для UserWasRegistered? Я чувствую, что использование подхода рабочих мест позволило мне вызывать эти «рабочие места» из других областей моего приложения в разное время. например призвание CreateNewBillingAccount может быть вызван, если пользователь изменил свои данные …?

8

Решение

Я рекомендую изменить имена слушателей, которые более четко описывают происходящее, поэтому я бы избегал прямого сопряжения слушателей с событиями.

Мы используем анемичный подход «событие / слушатель», поэтому слушатели передают фактическую задачу «исполнители» (работа, услуги, вы называете это).

Этот пример взят из реальной системы:

приложение / Провайдеры / EventServiceProvider.php:

    OrderWasPaid::class    => [
ProvideAccessToProduct::class,
StartSubscription::class,
SendOrderPaidNotification::class,
ProcessPendingShipment::class,
LogOrderPayment::class
],

Слушатели StartSubscription:

namespace App\Modules\Subscription\Listeners;use App\Modules\Order\Contracts\OrderEventInterface;
use App\Modules\Subscription\Services\SubscriptionCreator;

class StartSubscription
{
/**
* @var SubscriptionCreator
*/
private $subscriptionCreator;

/**
* StartSubscription constructor.
*
* @param SubscriptionCreator $subscriptionCreator
*/
public function __construct(SubscriptionCreator $subscriptionCreator)
{
$this->subscriptionCreator = $subscriptionCreator;
}

/**
* Creates the subscription if the order is a subscription order.
*
* @param OrderEventInterface $event
*/
public function handle(OrderEventInterface $event)
{
$order = $event->getOrder();

if (!$order->isSubscription()) {
return;
}

$this->subscriptionCreator->createFromOrder($order);
}
}

Таким образом, вы можете ссылаться на работу / услуги (SubscriptionCreator в этом примере) в других областях вашего приложения.

Также возможно связать слушателя с другими событиями, кроме OrderWasPaid,

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]