
Jan
06.01.2017
00:39:35
В основном все как-то о теории говорят.

Sergey
06.01.2017
00:40:19
> В основном все как-то о теории говорят.
ну DDD это для управления сложностью. Если у твоих проектов нет "нужной сложности" то и DDD ты не особо поймешь.
CQRS же очень простая идея о том, что по возможонсти операции чтения и записи следует разделять
идея простая, но дает кучу вариантов для дальнейших выдумок

Google

Sergey
06.01.2017
00:41:23
вроде read only model и т.д.
главное не перепутать CQRS и булшит вроде command/query bus
последнее можно воспринимать как очень частный случай CQRS

Jan
06.01.2017
00:42:22
То есть зачастую Command Bus — лишняя абстракция?

Sergey
06.01.2017
00:42:42
она налагает весьма жесткое ограничение - хэндлер команды ничего не может возвращать
это как бы... не особо большая проблема, но.... как по мне оверхэд
с другой стороны хоть как-то стандартизированный споосб работы с данными

Jan
06.01.2017
00:43:16
Ну, это известно.

Sergey
06.01.2017
00:43:19
а вот query bus это уже булшит

Jan
06.01.2017
00:44:08
А что это вообще?

Sergey
06.01.2017
00:44:19
ну это кк command bus но для операций чтения)
меня последний месяц не покидает ощущение что основная проблема... это то что command это обычно уровень приложения, а query вообще по сути к UI layer относится больше

Jan
06.01.2017
00:45:38
Хм. Ну, а если у меня такая ситуация, что корень предполагаемого агрегата тянет данные из разных источников? Как быть?

Google

Jan
06.01.2017
00:45:52
Скажем, сейчас это могут быть даже разные базы данных.

Sergey
06.01.2017
00:48:13
у твоего корня агрегата есть некий репозиторий, который вытянет его тебе весь
слазает в разные базы данных, слепит из данных агрегат и вернет корень
это не совсем "операция на чтение"... ну тоесть.. если бы твои агрегаты тупо валялись бы в памяти, у тебя было бы меньше путаницы как по мне
под операцией чтения я подразумеваю что тебе надо тупо отрендрить кусок этого агрегата, причем далеко не весь.

Jan
06.01.2017
00:51:01

Sergey
06.01.2017
00:51:26
> другие репозитории как зависимости?
99% что этого не будет
либо для тебя "репозиторий" = table gateway
что не то же самое

Jan
06.01.2017
00:52:02

Sergey
06.01.2017
00:52:13
можешь пояснить?

Jan
06.01.2017
00:53:40
Ну, скажем. Есть сущность компании. Если она скрыта от пользователей (выставлен соответствующий статус), то большую часть информации по ней вообще не надо подгружать.

Sergey
06.01.2017
00:57:38
ну так у тебя компания и есть корень агрегата
ты просто его весь не грузишь
и опять же - когда мы говорим про "отображать" агрегаты мы забываем и тупо делаем выборку из базы
с теми данными которые нам нужны
репозитории - только для бизнес логики
если тебе надо "что-то найти" то это уже задача других штук (назовем их файндерами)

Google

Sergey
06.01.2017
00:59:07
в этом соль разделения
можно хоть потом агрегировать готовые для просмотра данные в какую-нибудь эластику и брать все готовенькое оттуда
короч ладно
пойду я, завтра надо бы накинуть еще на тему "отображать это не совсем бизнес логика"

Jan
06.01.2017
01:09:01

Aleh
06.01.2017
08:06:01
Команды которые ничего не возвращают это мало удобно, просто они чаще всего не могут вернуть сразу все, например новую сущность, потому что операции асинхронные. Команда в таком случае вернёт uuid, а вы новым запросом можете получить всю инфу

Jan
06.01.2017
08:20:20
Сама суть command bus в том, что хендлер команды ничего не возвращает, а сама команда — DTO.
Если используется UUID, то его можно сгенерить заранее. Ну, а как быть с обычными айдишниками, фиг знает)

Aleh
06.01.2017
08:23:31

Jan
06.01.2017
08:23:47
Почему?

Aleh
06.01.2017
08:23:59
Я что-то сделала, но что никому не скажу

Aleh
06.01.2017
08:24:03
Иди и догадайся

Jan
06.01.2017
08:24:59
А как же соглашения об именовании?)
Так можно и про методы save/delete сказать. Хрен знает, что они под капотом делают)

Aleh
06.01.2017
08:26:39

Jan
06.01.2017
08:27:20
Нужен конкретный пример. Не совсем понимаю, о чем речь.

Aleh
06.01.2017
08:28:33
Делаешь добавление пользователя
Твоя команда ничего не возвращает
Как потом его открыть?

Google

Jan
06.01.2017
08:29:37
Новым запросом?

Aleh
06.01.2017
08:30:01
Куда?
В секунду добавляется 100 пользователей
Какого искать?

Jan
06.01.2017
08:30:50
Ну добавилось 100 пользователей. А что с ними дальше надо делать?

Aleh
06.01.2017
08:31:52
Тебе надо открыть того, что ты только что добавил
При этом другие люди добавляют других пользователей
Это могут быть например заявки какие-то
А не пользователи
А если что-то пошло не так?

Admin
ERROR: S client not available

Aleh
06.01.2017
08:33:42
Ты об этом никогда не узнаешь?

Jan
06.01.2017
08:34:36
Ну вот насчёт открытия нового не знаю, честно)) а по поводу каких-то ошибок. Можно же исключения использовать.
И соответствующие обработчики.
Как вариант, редирект на какую-то страницу с ошибкой.

Aleh
06.01.2017
08:35:40
Вот ты отправил запрос, команда ничего не возвращает (ошибки тоже)
Произошла ошибка
Что дальше?

Jan
06.01.2017
08:35:59
Выкинуть исключение

Aleh
06.01.2017
08:36:15
Команда же не возвращает ошибку?

Google

dypa
06.01.2017
08:36:41

Aleh
06.01.2017
08:37:05

Jan
06.01.2017
08:37:14
А зачем её возвращать. Она же может кинуть исключение. И попутно зафигачить событие, логи

Aleh
06.01.2017
08:37:43

Jan
06.01.2017
08:39:03

dypa
06.01.2017
08:39:13
где граница сложности?

Aleh
06.01.2017
08:39:55
Когда понимание предметной области требуют получения образования и много лет опыта работы в сфере

dypa
06.01.2017
08:41:38
любая модель "сложная". в 7 классе на курсе физики вам рассказывают понятие материальной точки, это пиздец сложная модель которая описывается всего парой формул которые в состоянии написать даже 7класник

Aleh
06.01.2017
08:42:12

dypa
06.01.2017
08:42:42
даладно?! кто может править пост? в какой момент нужно отображать пост

Aleh
06.01.2017
08:42:59

Jan
06.01.2017
08:43:05
На гитхабе есть пример DDD на Java. Там не используется Command Bus, но фасад, который возвращает идентификатор для последующего использования.
citerus/dddsample-core.

dypa
06.01.2017
08:43:46
2+2 тоже выглядит просто. а за + стоит нехилая модель

Jan
06.01.2017
08:43:52
С телефона замучаюсь ссылку писать.

Aleh
06.01.2017
08:44:25

Jan
06.01.2017
08:44:29
И как по мне, там все это довольно интересно реализовано.

Aleh
06.01.2017
08:44:46
Все упрется в стоимость разработки и дальнейшей необходимости поддержки
Сделанный правильно