2016-02-08 14 views
6

Mam wydarzenie zwane UserWasRegistered też mam słuchacz nazywa UserWasRegistered stamtąd intned rozwijać poleceń zadania o nazwie:nazewnictwa laravel imprezy, słuchacze i Praca

EmailRegistrationConfirmation

NotifyAdminsNewRegistration

CreateNewBillingAccount

Wszystkie te zadania zostaną wykonane w ramach klasy detektora zdarzeń UserWasRegistered.

Czy to jest prawidłowe podejście, czy też powinienem mieć wielu odbiorców dla UserWasRegistered? Czuję, że zastosowanie podejścia do pracy umożliwiło mi nazywanie tych "zadań" z innych obszarów w mojej aplikacji w różnych momentach. na przykład dzwoniąc pod numer CreateNewBillingAccount, jeśli użytkownik zmienił swoje dane ...?

+0

Zasadniczo lister nie powinien wywoływać zadań. Nie będąc odpowiedzialnym za wykonywanie samych zadań? – AndrewMcLagan

Odpowiedz

1

Polecam zmienić nazwy słuchaczy, które mówią bardziej szczegółowo o tym, co się dzieje, więc unikałbym parowania słuchaczy ze zdarzeniami.

Używamy anemicznego podejścia do zdarzenia/słuchacza, więc nasi słuchacze przekazują rzeczywiste zadanie "wykonawcom" (zlecenia, usługi, jak je nazwiesz).

Ten przykład pochodzi z prawdziwego systemu:

app/Dostawcy/EventServiceProvider.php:

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

StartSubscription słuchaczy:

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); 
    } 
} 

W ten sposób można wywołać zlecenia/usługi (SubscriptionCreator w tym przykładzie) w innym er obszarów twojej aplikacji.

Istnieje również możliwość powiązania odbiornika z innymi zdarzeniami, z wyjątkiem OrderWasPaid.

Powiązane problemy