@oop_ru

Страница 442 из 785
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
Стартует с команды "выполни что-то большое и длинное". И начинает по шагам выполнять. Фаерит первую команду, подписывается на событие, которая оная порождает. Получила событие - зафаерила новую команду и т.д.

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
С бэком

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
так что именно нехорошо?
А то, что у нас процесс живет условно вечность. И в этом процессе куча потоков. Соответственно если синглтон делать - то все потоки туда писать будут.

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

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

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
я вытягиваю под конкретную сущность
То есть на конретную прям - типа юзер такой-то с таким-то id?

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

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

Roman
27.12.2017
14:40:56
чую стоит тебе ещё про pessimistic/optimistic lock посмотреть
Ну оптимистик - это когда мы рассчитываем что сущность параллельно с нашим текущим контекстом не менялась, а если обнаружили коллизию - упали. Писимистик - тупо лочим и всё на этом.

Aleh
27.12.2017
14:41:23
То есть на конретную прям - типа юзер такой-то с таким-то id?
да, unit of work дает тебе все сущности, которые были в текущей транзакции, ты по ним достаешь ивенты

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
на столько, на сколько мягкое может мешать тёплому)

Sergey
27.12.2017
17:46:17
А если несколько потоков
у тебя один агрегат в одном потоке, так что все будет хорошо

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, то и конкуррентного доступа нет, и блокировок, и синхронизаций. Сугубо с практической точки зрения смотрю) Но поищу как другие делают) А то забодал уже вас уже своими вопросами наверное)

Roman
27.12.2017
20:58:44
а ты смотрел Как именно предлагают с этим жить? просто мне что-то подсказывает что ты просто теоритизируешь и паникуеш но разбиратьяс не пробовал
Пробовал. Смотрю - и не нравится. Мс предлагает при сохранении изменений в EF с ивентами работать. Тоже такое не понравилось - потому что в одной транзакции сохранений может быть несколько.

В общем буду дальше копать)

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

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