@prophp7

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

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

Sergey
06.01.2017
00:57:38
ну так у тебя компания и есть корень агрегата

ты просто его весь не грузишь

и опять же - когда мы говорим про "отображать" агрегаты мы забываем и тупо делаем выборку из базы

с теми данными которые нам нужны

репозитории - только для бизнес логики

если тебе надо "что-то найти" то это уже задача других штук (назовем их файндерами)

Google
Sergey
06.01.2017
00:59:07
в этом соль разделения

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

короч ладно

пойду я, завтра надо бы накинуть еще на тему "отображать это не совсем бизнес логика"

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
> В основном все как-то о теории говорят. ну DDD это для управления сложностью. Если у твоих проектов нет "нужной сложности" то и DDD ты не особо поймешь.
вот не согласен, DDD это про формирование модели, единый язык и перевращение всего этого в код с помощь удачных приемов конкретного автора все упарываются только по технической части DDD

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

Jan
06.01.2017
08:39:03
Чем throw от return отличается?)
Тем, что прерывает нормальное выполнение сценария))

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

Aleh
06.01.2017
08:39:55
где граница сложности?
Эванс и никто другой не взялись давать критерии, все по личным ощущениям

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

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

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

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
даладно?! кто может править пост? в какой момент нужно отображать пост
Вопрос дальше в сложности кода и приложения, процедурный скрипт на 100 строк или объектная модель

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

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

Сделанный правильно

Страница 170 из 1387