
Aleh
27.12.2017
14:28:46
синглтон просто собирает ивенты из домена
потом по комиту их некто из этого синглтона достает и делает свои дела

Roman
27.12.2017
14:29:11

Aleh
27.12.2017
14:29:14
паблишит, контейнер дергает

Google

Maksim
27.12.2017
14:29:17
сага ничего не обрабатывает в идеальном мире
и чёт мне подсказывает, что стартует она с команды, а не с эвента

Roman
27.12.2017
14:29:25
Только свои ивенты собирает?
Можно на пальцах?

Aleh
27.12.2017
14:29:59

Roman
27.12.2017
14:30:24

Aleh
27.12.2017
14:30:43
const DomainEvents = {
record(entity, event)
getRecorded()
}
потом UoW сам собирает нужные ему сущности

Maksim
27.12.2017
14:31:05
Стартует с команды "выполни что-то большое и длинное".
И начинает по шагам выполнять. Фаерит первую команду, подписывается на событие, которая оная порождает.
Получила событие - зафаерила новую команду и т.д.

Roman
27.12.2017
14:31:31

Aleh
27.12.2017
14:31:31
если несколько потоков, то это уже ваши решения про локи и все такое

Roman
27.12.2017
14:32:03

Maksim
27.12.2017
14:32:03
сагу можно легко представить в виде блок-схемы: если/то

Google

Roman
27.12.2017
14:32:10
С бэком

Aleh
27.12.2017
14:32:30

Roman
27.12.2017
14:32:36
И тестами крыть

Maksim
27.12.2017
14:32:38
тестами крыть аще великолепно

Roman
27.12.2017
14:33:07

Maksim
27.12.2017
14:33:28
тестов саги? нет.
руки никак не дойдут демку сделать
у тебя каждная команда отвечает за 1 единственную задачу. В чём сложность её тестирования?)

Roman
27.12.2017
14:34:22
так что именно нехорошо?
А то, что у нас процесс живет условно вечность. И в этом процессе куча потоков. Соответственно если синглтон делать - то все потоки туда писать будут.

Aleh
27.12.2017
14:35:14

Maksim
27.12.2017
14:35:15
ну в чём сложность-то?
протестить что при вызове метода someEvent создастся команда DoSome() ?

Roman
27.12.2017
14:36:06
и?)
И когда ты ивенты будешь писать в синглтон, то там будут ивенты и которые твой текущий обработчик насоздавал и которые параллельно с ним насоздавали в соседних потоках

Aleh
27.12.2017
14:36:27
чужие не увижу

Roman
27.12.2017
14:36:38

Maksim
27.12.2017
14:36:45
и?

Roman
27.12.2017
14:37:06
и?
Ну просто это много тестов)

Maksim
27.12.2017
14:37:17
чем роллбэк будет отличаться от
"протестить что при вызове метода someEvent создастся команда DoSome() ?"

Google

Aleh
27.12.2017
14:37:23
много действий - много тестов

Roman
27.12.2017
14:37:33
Сорри если вопросы дурацкие - я в этом всём разобраться просто пытаюсь.

Maksim
27.12.2017
14:39:54
чую стоит тебе ещё про pessimistic/optimistic lock посмотреть

Roman
27.12.2017
14:40:56

Aleh
27.12.2017
14:41:23

Maksim
27.12.2017
14:41:41
всё знаешь, всё понимаешь...) вопрос-то в чём тогда?) соедение тайные знания и велкам)

Roman
27.12.2017
14:42:35

Maksim
27.12.2017
14:42:59
зря ты тут cqrs и ddd в 1 флакон налил) беги лучше)

Aleh
27.12.2017
14:43:08
да нет магии никакой)

Roman
27.12.2017
14:43:22
Ну для меня пока что есть)

Maksim
27.12.2017
14:43:55
на столько, на сколько мягкое может мешать тёплому)

Roman
27.12.2017
14:44:04

Sergey
27.12.2017
17:46:17

Roman
27.12.2017
20:36:54

Sergey
27.12.2017
20:37:31

Roman
27.12.2017
20:38:45

Aleh
27.12.2017
20:39:33
вы немного зациклились

Google

Sergey
27.12.2017
20:42:47
ну и нет, ты можешь сделать на кажды поток свой "сингелтон"
будет регистри)
мне кажется что ты думаешь что этот "сингелтон" еще и за паблишинг событий отвечает - это не так. Он их тупо хранит и все
у него есть метод "запомнить события" и метод который вернет "что произошло" (стрим событий)
все
короч все зависит от того как сделаешь - просто почитай как люди делают

Roman
27.12.2017
20:56:17
короч все зависит от того как сделаешь - просто почитай как люди делают
Ок. Да про DI и лайфтаймы я знаю. Просто не охота синглтон, потому что это конкуррентный rw. А это блокировки. А если бы он был InstancePerRequest, то и конкуррентного доступа нет, и блокировок, и синхронизаций.
Сугубо с практической точки зрения смотрю)
Но поищу как другие делают)
А то забодал уже вас уже своими вопросами наверное)

Sergey
27.12.2017
20:56:57

Roman
27.12.2017
20:58:44
В общем буду дальше копать)

Ivan
27.12.2017
21:03:04
напился я так что попытаюсь термин из фантастики реализовать, это координатная матрица образующуя на 1 времени множество условных механизмом частиц
char->n, line->n else?
locatation to displace
code to simple fragmenets
I wonder can I a rewrite php as just bunch of letters

Jan
27.12.2017
22:38:57
Есть ли какая-то принципиальная разница между внедрением объекта-значения и его композицией? То есть вместо
class Notification
{
public function __construct(string $message, Nick $recipient, Nick $sender)
}
было бы
class Notification
{
public function __construct(string $message, string $recipient, string $sender)
{
$this->recipient = new Nick($recipient);
$this->sender = new Nick($sender);
}
}
Вроде как клиентский код упростился бы, но есть сомнения.

Ярослав
27.12.2017
22:45:41
Во втором случае Notification знает как создавать Nick
И тут напрашивается вопрос сам собой: зачем ему это знать ?

Sergey
27.12.2017
22:55:11

Google

Sergey
27.12.2017
22:55:49
ну и еще - Nick по идее уже где-то хранится, и упрощение за счет введение этого VO заключается в том, что все правила валидного никнейма заключены в нем
по факту в клиентском коде у тебя будет что-то типа Notification::new($message, $profile->nickName(), $sender)
либо если никнейм это данные которые пользователь вводит - тебе придется делать какой-нибудь if который выгоднее положить в отдельный объект

Jan
27.12.2017
23:08:24

Sergey
27.12.2017
23:08:44