@oop_ru

Страница 503 из 785
Sergey
14.02.2018
18:39:12
чем листенеры отличаются от хендлеров??
хэнделы для команд (что сделать), а листенеры для ивентов (что произошло)

команда - причина, ивент - следствие

вот и вся разница

Артур Евгеньевич
14.02.2018
18:40:09
а листенеры ивентов могут порождать новые команды и "пушить" их в шину?

Google
Sergey
14.02.2018
18:40:14
да

так ты попадаешь в дивный мир саг

Bohdan
14.02.2018
18:40:35
а хендлерам лучше не запускать

Sergey
14.02.2018
18:41:04
ну то есть выполнение какого-то процесса в системе должно выражаться как поток команд и событий

( зарегистрируй юзера) -> юзер зареган -> (создай ему баланс) -> баланс сознад....

Bohdan
14.02.2018
18:42:27
( зарегистрируй юзера) -> юзер зареган -> (создай ему баланс) -> баланс сознад....
я свое извращение на сагах сделал только потому, что я могу держать весь флоу в одном месте

Sergey
14.02.2018
18:42:43
и название у этого места известно какое

Bohdan
14.02.2018
18:43:30
сага, ага ну или не сага просто хоть ты и говорил, что такое можно сложить красиво бред саг - я все равно не придумал, как

Sergey
14.02.2018
18:43:49
а листенеры ивентов могут порождать новые команды и "пушить" их в шину?
короч, могу тебе сказать только одно - лазить в это тебе надо только тогда, когда ты уже жотя бы примерно понимаешь как можно раздробить твою систему на части

finkel
14.02.2018
18:43:59
да а что н так?
а если «затонируйся» это снять тонировку, помыть стекло и поставить тонировку. И это единый алгоритм для всех объектов которые можно тонировать?)

Sergey
14.02.2018
18:44:04
и еще - ты понимаешь что "показать список" или "сформировать репорт" на эту тему чуть по другому ложится

finkel
14.02.2018
18:46:34
Google
Артур Евгеньевич
14.02.2018
18:53:24
Sergey
14.02.2018
18:54:12
ну да, стекло само себя не тонирует)
объект "стекло" представляет объект реального мира а не является им. Так что он вполне может "затонировать" себя.

как объект "дверь" может себя открыть, а "человек" может себя убить

Артур Евгеньевич
14.02.2018
18:54:27
короч, могу тебе сказать только одно - лазить в это тебе надо только тогда, когда ты уже жотя бы примерно понимаешь как можно раздробить твою систему на части
система не мной написана, мне надо в текущей разобратсья. Вообще сейчас задача поймть и убрать дедлок, а в том модуле всё сделано вот так вот

Bohdan
14.02.2018
18:54:28
что за "саг"?
сага, паттерн такой

Артур Евгеньевич
14.02.2018
18:55:50
ок

ладно спасибо вам, стало попонятнее

finkel
14.02.2018
18:59:02
Артур Евгеньевич
14.02.2018
19:03:32
Так а в чем плюсы использования команд баса, если хендлер один? в чем проблема добавить одну строчку в контроллере?

вот с событиями мне виден профит, типо одно событие произошло и все его обрабатывают

Артур Евгеньевич
14.02.2018
19:12:45
Не совсем понял. Чем по факту отличается SomeService->createUser(UserDTO) от commnadBus->handle(UserCommand)

а ну да, пока писал понял - нам ен нужно инджектить лишние сервисы в контроллер))

и реализацию обработки команд можно переключать с помощью конфигов

есть еще что то что я упустил?

Bohdan
14.02.2018
19:20:55
и реализацию обработки команд можно переключать с помощью конфигов
логгирование общее изи прикрутить но в общем как говорил Сергей - в основном при распределенке уместно

Артур Евгеньевич
14.02.2018
19:25:44
что то я не подумал изначально об это

Bohdan
14.02.2018
19:25:56
не

Google
Bohdan
14.02.2018
19:26:09
можем сделать обертку над тем методом комманд баса, который будет выполнять все

посмотри tactician

там хорошо показаны такие примеры

Sergey
14.02.2018
19:30:54
зеркало как композиция

типа абстрактная фабрика?

ну и да - выносить это как отдельную фабрику не вижу смысла

особенно если это было "легко"

Ihor
14.02.2018
19:32:12
а с другой стороны, зачем этот метод наследникам?

Sergey
14.02.2018
19:32:44
а с другой стороны, зачем этот метод наследникам?
а с другой стороны - я не думаю что это место вообще имеет проблемы

Ihor
14.02.2018
19:35:18
типа абстрактная фабрика?
скорее обычная фабрика

Sergey
14.02.2018
19:35:46
скорее обычная фабрика
нет, у тебя была абстрактная фабрика

Sergey
14.02.2018
19:35:52
по идее

Ihor
14.02.2018
19:38:57
public static function create ($classsName) { if ($className == 'ReportA') { return new ReportA(); } .................................. }

абстрактная должна предоставлят интерфейс, для создания объектов...

Книжку по рефакторингу посоветуете?)

da horsie
14.02.2018
19:56:14
гуглить "фаулер рефакторинг"

Ihor
14.02.2018
20:03:45
спасибо

Google
Артур Евгеньевич
14.02.2018
20:14:10
Responsibilities of the command bus — Matthias Noback - Blog https://matthiasnoback.nl/2015/01/responsibilities-of-the-command-bus/

Bohdan
14.02.2018
20:14:51
я его статью и пытался рассказать)

Артур Евгеньевич
14.02.2018
20:15:37
я его статью и пытался рассказать)
Так он там командbus декорирует именно а не хендлер)

Sergey
14.02.2018
20:27:17
Так он там командbus декорирует именно а не хендлер)
ну так его и надо декорировать, а не хэндлер

Алексей
14.02.2018
20:40:34
стекло не должно пропускать все что связано со светом через объект тонировки Ton, который по умолчанию установлен в NoTon? И все что связано со свойствами стекла, при обращении должно вычисляться с учетом характеристик Ton? Ну и зависит от уровня модели

Ton соответственно может быть засечен кем угодно

Артур Евгеньевич
14.02.2018
20:47:23
ну так его и надо декорировать, а не хэндлер
и что мне получается, два хендлера помечать как обработчики одной команды?

Admin
ERROR: S client not available

Артур Евгеньевич
14.02.2018
20:47:27
как это конфигурить?

Sergey
14.02.2018
20:47:43
один хэндел = одна команда

нафига тебе два их?

Артур Евгеньевич
14.02.2018
20:48:35
class CommandBusWithAddedBehavior implements CommandBus { public function __construct(CommandBus $originalCommandBus) { $this->originalCommandBus = $originalCommandBus; } public function handle($command) { // do anything you want $this->originalCommandBus->handle($command); // do even more } }

не понимаю как рарзлится то что команда сначала должна обрабоатся по этой шине CommandBusWithAddedBehavior каким то обработчиком, а потом по обычной

Sergey
14.02.2018
20:52:35
$foo = function($x) { return $x * 2; } $bar = function ($foo) { return $foo() + 2; } echo $bar($foo(10));

что получится?

Артур Евгеньевич
14.02.2018
20:54:20
$foo = function($x) { return $x * 2; } $bar = function ($foo) { return $foo() + 2; } echo $bar($foo(10));
да это я понимаю, я не понимаю как соотносятся разные обработчики в разных шинах

Sergey
14.02.2018
20:54:23
CommandBusWithAddedBehavior - это просто какой-то декоратор. Например который после выполнения команды тебе UoW зафлашит, или в логи попишет какую команду он собирается выполнять

Google
Sergey
14.02.2018
20:54:51
да это я понимаю, я не понимаю как соотносятся разные обработчики в разных шинах
у тебя есть какая-то шина в самом конце которая имеет мэпу command => handler и соответственно выбирает нужный

что тут не понятного?

шины-декораторы про это ничего не знают

Артур Евгеньевич
14.02.2018
20:56:27
да разобрался

просто думал что метод $commandBusWithAddedBehavior->handle($command) тоже должен как то смапить нужный обработчик, сейчас понял что там просто прокидывание по сути

В каком слое вы храните dto? Presentation или Infrastructure?

Sergey
15.02.2018
14:06:19
и какой слой выше а какой ниже?

и presentation и infrastructure слои одного уровня примерно

Adel
15.02.2018
14:09:08
в конечном свете - DTO принадлежит более низкому слою :) очевидно ж

Evgenij
15.02.2018
14:11:44
Можеть ли сущность отдавать данные в виде DTO обьекта ?

Sergey
15.02.2018
14:13:58
Evgenij
15.02.2018
14:17:51
может, ты вообще все можешь
Да, но наскольлко это правильно , видел реализацию через класс ассемблер и не совсем понял зачем доп абстракция

Sergey
15.02.2018
14:18:09
иногда удобно

когда тебе надо получить 1 DTO из двух сущностей

da horsie
15.02.2018
17:10:16
В каком слое вы храните dto? Presentation или Infrastructure?
В том, что "внутрее". Чтобы зависимости смотрели внутрь.

Ihor
15.02.2018
18:29:53
Я вот читал утром про OrderService.CancaleOrder и Order.Cancel

Sergey
15.02.2018
18:31:01
Ihor
15.02.2018
18:31:15
скажем, во время отмены ордера надо - отослать емейл, изменить количество доступных продуктов который были в оредере

Страница 503 из 785