Size: a a a

2020 September 10

AB

Alexander Borisov in Yii Framework 3
Dmitriy S
Нет. Смотри, у тебя есть сервис App\Service\User в нем есть метод create() в котором вызывается $this->dispatcher->trigger(UserAfterCreate::class). И вот этому сервису абсолютно однофигственно куда ты его заинжектишь, в консольную команду или в веб-контроллер.
если бизнес-логика требует три разных поведения, то у него будет три метода createCli, createFrontend, createBacked
источник

DS

Dmitriy S in Yii Framework 3
Alexander Borisov
если бизнес-логика требует три разных поведения, то у него будет три метода createCli, createFrontend, createBacked
И это будет ужасно, зачем сервису знать об инфраструктуре?
источник

AB

Alexander Borisov in Yii Framework 3
Dmitriy S
И это будет ужасно, зачем сервису знать об инфраструктуре?
ок, createByAdministrator, userRegistration, createBySystem.
источник

EU

Evgeniy U in Yii Framework 3
Dmitriy S
Нет. Смотри, у тебя есть сервис App\Service\User в нем есть метод create() в котором вызывается $this->dispatcher->trigger(UserAfterCreate::class). И вот этому сервису абсолютно однофигственно куда ты его заинжектишь, в консольную команду или в веб-контроллер.
Мне кажется что не стоит смешивать создание и отправку события в одном месте в данном кейсе.
А если из панели надо будет создать юзера с другими данными? Это же не решить конфигурированием
источник

EU

Evgeniy U in Yii Framework 3
Alexander Borisov
ок, createByAdministrator, userRegistration, createBySystem.
Просто из панели можно добавить доп аргумент который скажет о том что нужно что то сделать ещё
Или для панели добавить доп. логику над общим сервисом. На мой взгляд об этом разработчик должен думать а не конфиги
источник

DS

Dmitriy S in Yii Framework 3
Alexander Borisov
ок, createByAdministrator, userRegistration, createBySystem.
Но зачем? Зачем пихать туда логику, когда она там не нужна? Создание пользователя прозрачно, создал сущность по дто , визвал эм и заперсистил. Все абсолютно одинаково. А то, что отличается уже должно быть в другом слое, то есть конкретно в команде, экшине или еще где-то, где вызывается этот сервис.
источник

EU

Evgeniy U in Yii Framework 3
Dmitriy S
Но зачем? Зачем пихать туда логику, когда она там не нужна? Создание пользователя прозрачно, создал сущность по дто , визвал эм и заперсистил. Все абсолютно одинаково. А то, что отличается уже должно быть в другом слое, то есть конкретно в команде, экшине или еще где-то, где вызывается этот сервис.
А вот смотри у тебя несколько приложений консольное и два веб и везде используется один метод а логика в них выполняется разная и нужно думать об этом и знать ещё о каком то там конфиге
источник

AB

Alexander Borisov in Yii Framework 3
Dmitriy S
Но зачем? Зачем пихать туда логику, когда она там не нужна? Создание пользователя прозрачно, создал сущность по дто , визвал эм и заперсистил. Все абсолютно одинаково. А то, что отличается уже должно быть в другом слое, то есть конкретно в команде, экшине или еще где-то, где вызывается этот сервис.
ок, тогда тригер эвента переносится в команду, экшен или еще куда, а там уже разные эвенты
источник

DS

Dmitriy S in Yii Framework 3
Alexander Borisov
ок, тогда тригер эвента переносится в команду, экшен или еще куда, а там уже разные эвенты
Ты можешь его где-то упустить и события не будет, когда оно в сервисе, то события будет всегда после успешной записи в базу.
источник

AB

Alexander Borisov in Yii Framework 3
ну на этот случай есть тесты
источник

DS

Dmitriy S in Yii Framework 3
Alexander Borisov
ну на этот случай есть тесты
Тесты не все заказчики могут себе позволить, надо жить в реальном мире)
источник

EU

Evgeniy U in Yii Framework 3
Тесты можно и на «забыл записать событие» написать
источник

EU

Evgeniy U in Yii Framework 3
По мне так тут два сервиса. И в панели дергать доп.  метод второго. Логика может быть разная в разных экшенах. Разные события при создании в одном месте и в другом.
источник

EU

Evgeniy U in Yii Framework 3
Как раз разные конфиги не добавляют прозрачности
источник

EU

Evgeniy U in Yii Framework 3
А если рассматривать микросервисную архитектуру то это вообще разные приложения с разным кодом и конфигами
источник

T

TradersVE in Yii Framework 3
Wow, I managed to understand the logic of how to make an event that executes what I need, many will not be able to understand the EventDispatcherProvider configuration, thank goodness it exists.
источник

T

TradersVE in Yii Framework 3
A normal user does not do that configuration, where the container injects an event, which then verifies that it exists and trigger.
источник

AM

Alexander Makarov in Yii Framework 3
Evgeniy U
А если рассматривать микросервисную архитектуру то это вообще разные приложения с разным кодом и конфигами
Микросервисы - не единственно возможная, хоть и хайповая сейчас, архитектура.
источник

AM

Alexander Makarov in Yii Framework 3
На тему не различать контейнер web / cli - интересная мысль.
источник

AM

Alexander Makarov in Yii Framework 3
Но не особо понятны плюсы кроме того, что конфиг один.
источник