Для простых ответов - достаточно в экшне сделать.
Посему если есть возможность выполнить функциональность без ивент-лупа
а зачем вам они нужны?
namespace \Acme\Domain;
use \Acme\Domain\Commands;
class Events\OrderHandler
{
public function onOrderCreated(Events\Event $event, Entities\Order $order)
{
// @todo Use ACL here
// All actions are async
$this->getService('mailer')->send('courier@example.com', 'New order!');
$this->getService('externalApiName1')->exportOrder($order);
$this->getService('externalApiName2')->exportOrder($order);
$this->getService('commandBus')->handle(new Commands\Courier\DetectAndUpdateStatus($order->getCourier()));
}
}
Если в "сервис" вы вкладываете понятие простого класса, умеющего форматировать ответы вашего проекта - мысль здравая.
Если есть возможность отказаться от событийной модели - часто лучше отказаться.
Функционал "PostBeforeEdit/PostBeforeEditHandler" часто дешевле
Гибкая настройка вплоть до каждого поля 90% что не нужна.
Случайно наткнулся на хабратред посвящённый сервис-локатору – походил по ссылкам, погуглил и ваша реакция здесь теперь понятна, спасибо.
Вообще, тот `getService('mailer')` появился из-за того, что я обычно использую это в контроллерах фреймворка, на котором пишу чаще всего (Phalcon). Или магическую версию `$this->mailer` вместе с докблоками, содержащими типы указанных сервисов.