Size: a a a

2020 August 10

AM

Alexander Makarov in Yii Framework 3
Dmitriy S
Я еще раз подумал и пришел к выводу, что публичный метод attach() - это однозначно кака, он будет постоянно приводить к нарушению интерфейса, что убивает весь смысл psr
Ну чего вдруг? Он юзается только при конфигурации. Это как в конструкторе передать массив, только не так :)
источник

AM

Alexander Makarov in Yii Framework 3
Но могу и конструктор сделать, конечно :)
источник

DS

Dmitriy S in Yii Framework 3
Alexander Makarov
Ну чего вдруг? Он юзается только при конфигурации. Это как в конструкторе передать массив, только не так :)
А зачем он вообще нужен. Для использование вне Yii и конфигурирования рантайм? Так не выйдет так использовать его
источник

DS

Dmitriy S in Yii Framework 3
Конкретно в Yii нам метод attach не нужен, мы используем конфиги. А вне Yii его использовать корректно не получится, только разв в каком-то говнокоде с сервислокатором и без интерфейсов, где о PSR даже речи не идет
источник

AM

Alexander Makarov in Yii Framework 3
Dmitriy S
А зачем он вообще нужен. Для использование вне Yii и конфигурирования рантайм? Так не выйдет так использовать его
Выйдет.
источник

DS

Dmitriy S in Yii Framework 3
Alexander Makarov
Выйдет.
Пример класса приведи
источник

AM

Alexander Makarov in Yii Framework 3
Ну ровно так же...
источник

AM

Alexander Makarov in Yii Framework 3
Да, ты прав что attach нужен только чтобы удобно конфижить и всё.
источник

AM

Alexander Makarov in Yii Framework 3
Технически он получается приятней.
источник

AM

Alexander Makarov in Yii Framework 3
$provider->attach(function (AfterDocumentProcessed $event) {
   $document = $event->getDocument();
   // do something with document
});

$provider->attach(function (AfterDocumentProcessed $event) {
   $document = $event->getDocument();
   // do something with document
});

vs

new Provider([
 AfterDocumentProcessed::class => [
    function (AfterDocumentProcessed $event) {
       $document = $event->getDocument();
       // do something with document
    },
    function (AfterDocumentProcessed $event) {
       $document = $event->getDocument();
       // do something with document
    },
 ],
]);
источник

DS

Dmitriy S in Yii Framework 3
Alexander Makarov
Ну ровно так же...
Вот такое использование ты хочешь?
class MyService
{
   public function __constract(ListenerProviderInterface $provider) {
          $provider->attach(function (object $e) {}, MyEvent::class);
   }
}
источник

AM

Alexander Makarov in Yii Framework 3
Dmitriy S
Вот такое использование ты хочешь?
class MyService
{
   public function __constract(ListenerProviderInterface $provider) {
          $provider->attach(function (object $e) {}, MyEvent::class);
   }
}
Нет.
источник

DS

Dmitriy S in Yii Framework 3
А оно будет именно так
источник

AM

Alexander Makarov in Yii Framework 3
Alexander Makarov
$provider->attach(function (AfterDocumentProcessed $event) {
   $document = $event->getDocument();
   // do something with document
});

$provider->attach(function (AfterDocumentProcessed $event) {
   $document = $event->getDocument();
   // do something with document
});

vs

new Provider([
 AfterDocumentProcessed::class => [
    function (AfterDocumentProcessed $event) {
       $document = $event->getDocument();
       // do something with document
    },
    function (AfterDocumentProcessed $event) {
       $document = $event->getDocument();
       // do something with document
    },
 ],
]);
Вот в этой штуке мне не нравится что:

1. Теряется возможность явно не указывать класс события.
2. Нужно запоминать что там за массив.
источник

AM

Alexander Makarov in Yii Framework 3
Теоретически мы можем туда variadic фигануть...
источник

DS

Dmitriy S in Yii Framework 3
Alexander Makarov
Вот в этой штуке мне не нравится что:

1. Теряется возможность явно не указывать класс события.
2. Нужно запоминать что там за массив.
Сделай отдельно конфигуратор в event-dispatcher с методом attach
источник

DS

Dmitriy S in Yii Framework 3
Dmitriy S
Сделай отдельно конфигуратор в event-dispatcher с методом attach
$config = new EventConfig();
$config->attach(function (AfterDocumentProcessed $event) {
   $document = $event->getDocument();
   // do something with document
});
$provider = new Provider($config->getConfig());
источник

DS

Dmitriy S in Yii Framework 3
Или даже так
`
$provider = new Provider($config);
`
а наш EventConfigurator будет возвращать либо этот объект конфига, либо сам провайдер и тогда его можно переименовать в ProvideBuilder
источник

AM

Alexander Makarov in Yii Framework 3
ну, кстати
источник

DS

Dmitriy S in Yii Framework 3
Alexander Makarov
ну, кстати
и тогда ты в провайдере не будешь нарушать интерфейс
источник