@oop_ru

Страница 758 из 785
Aleh
24.09.2018
09:31:17
(может быть я неправильно употребил термин агрегат перестаёт быть агрегатом если его куда-то смапили? или если нарисовали на бумажке) нет, не доменная. прилетает DTO из фронтенда и в нём лежит информация для обновления агрегата, структурно его повторяющая
с фронтенда прилетает не агрегат, а дто которая может чем-то напоминать ваш объект, но вообще совершенно необязательно, эту дто даете вашему агрегату в какой-то конкретный метод(зависит от того, что за действие выполняется, например updateProfile, bookItem и т.д.), он уже сам думает че и как ему обновить

зачем присылать id внутренних структур неясно

или вообще зачем присылать с фронта то, что не может изменится

Dmitry
24.09.2018
09:37:11
э… а как идентифицировать сущности для обновления, если не знать их id? есть папка с пронумерованными листами. я отправил папку юзеру, он на некоторых написал, а некоторые выбросил и отал мне папку обратно. как без id листа обновить состояние оного?

Google
Aleh
24.09.2018
09:38:30
зачем вам обновлять? Выкиньте старую папку, из того, что вам прислал пользователь создайте новую

не понимаю задачи, не могу советовать решение. Если вы уже знаете агрегат, то дальше все достаточно просто. Если у вас там какие-то мутабельные списки в агрегате, то вероятно стоит разделить агрегат

Dmitry
24.09.2018
09:52:23
мм… выкинуть — вариант, наверное. но мне ещё нужно сохранить состояние в базе. и чтобы выкинуть нужно будет вначале вычистить всё из базы по связям, а потом сохранить новую папку, получив побочкой ещё и новый автоинкремент ключей. а юзер всего лишь поменял тайтл в одном листе а у папок несколько уровней вложенности возможно, вместо DTO с конечным состоянием папки более красиво сделать Event Sourcing на фронте и кормить агрегат изменениями, но это немного времязатратно в данный момент поэтому отдаю наружу id, чтобы обновить существующее и добавить отсутствующее

Aleh
24.09.2018
10:04:21
если пользователь работает с конкретным элементом и что-то в нем меняет, то может это и есть корень агрегата?

Dmitry
24.09.2018
10:20:32
насколько я понимаю, агрегат — штука для обеспечения согласованности данных в моём случае, при добавлении листа в папку нужно проставить связи между листами. т.е. нельзя просто так взять и положить лист в папку. поэтому корень агрегата — всё-таки папка. и при этом пользователь может изменить заголовок листа… но ведь всё равно это изменение проходит через корень агрегата

Sergey
24.09.2018
10:23:59
папка корень агрегата но файлы не входят в этот агрегат. и списки тоже. Тебе нужна только айдишка списка

иначе с твоими тремлениями ты закончишь на том что у тебя естть один корень агрегата на вообще все операции (поскольку это единственный способ убедиться в консистентности всех связей). А это не практично

Aleh
24.09.2018
10:25:06
да, ФС хорошая аналогия, папка - корень агрегата и файл тоже корень агрегата, они могут быть связаны айдишками

Bohdan
24.09.2018
10:44:00
то есть, корень агрегата - это папка, список файлов в ней - внутри агрегата но файлы - не внутри

так?

Sergey
24.09.2018
10:45:28
типа того, только идентификаторы

Google
Sergey
24.09.2018
10:45:29
табличка

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

Bohdan
24.09.2018
10:47:01
вместо списка?

Aleh
24.09.2018
10:47:24
список айдишек)

Bohdan
24.09.2018
10:47:33
ну это и имел ввиду

теперь у меня вопрос - доменные ивенты

представим, что у нас есть та же самая папочка с файликами и файлики в ней я могу делать энное количество действий над файликами и над папочкой но когда я удаляю файл из папки - кто должен выбросить ивент?

папка? потому, что файл - это ее часть или файл? потому, что удаляют его, и сообщает об этом он (прощается, бгг)

Bohdan
24.09.2018
11:24:57
окей, другая аналогия - коробка и вещи в коробке коробка не владеет вещами, а просто их хранит

illiatshurotshka❄️
24.09.2018
11:26:34
файловая система по определенной подписке
потому что папки тоже удалимы)

Yury
24.09.2018
11:26:47
Думаю - папка. Она удаляет файл из списка и бросает ивент

Bohdan
24.09.2018
11:27:22
давай не будем уточнять детали) вот еще подобная аналогия - телефонная книга и контакт в ней

illiatshurotshka❄️
24.09.2018
11:28:01
ну собственное существование вообще не должно быть вопросом объекта

т.е. по-моему он не должен заботится о создании себя, удалении себя

Bohdan
24.09.2018
11:29:06
да, согласен, хороший поинт

Yury
24.09.2018
11:29:26
А у вещи внутри есть ссылка на "хозяина"?

Наверное зависит от контекста.

Bohdan
24.09.2018
11:29:56
в моем кейсе есть, хоть я до сих пор не уверен в том, что это реальная бизнес-необходимость, а не сделано на поводу у UI

Google
Bohdan
24.09.2018
11:34:03
Для чего?
ну типа для того, чтобы вещь знала, где она лежит но это, в принципе, уже другая дискуссия - с ивентом я согласен

Yury
24.09.2018
11:35:12
У меня вопрос. Есть у кого-нибудь примеры, связи ограниченных контекстов напрямую внутри одного инстанса? Все примеры, которые я вижу используют еще и микросервисы и обычно это http или mq связь. Я понимаю преимущества микросервиса. Просто если пока 1 сервак в проекте, не хотелось бы с точки зрения перформанса поднимать по инстансу на контекст. Хотелось бы сохранить четкие границы, чтобы потом лекго было перейти на микросервисы.

Возможно вопрос тупой, тогда поправьте плиз меня.

Yury
24.09.2018
11:47:58
какая связь между микросервисами и серваками?
Просто это экономия. Прослойка http. Сериализация десериализация объектов. Больше одного инстанса джавы, внутри каждой веб сервер.

В принципе сейчас все работает на одном инстансе приложения. И огр. контексты разбиты по модулям. Работают через более менее понятные интерфейсе. Мне стало интересно как описать эту границу более четко, чтобы в коде было конкретно видно где она. Именно на практике.

Sergey
24.09.2018
14:17:50
Просто это экономия. Прослойка http. Сериализация десериализация объектов. Больше одного инстанса джавы, внутри каждой веб сервер.
просто суть в том что нет никакой разницы микросервисы или не микросервисы. Микросервисы не обязывают тебя делать взаимодействие по http - с точки зрения клиентского кода это будут либо ивенты либо вызовы методов. Так же как если бы все крутилось в одном и том же процессе. Просто появляются нюансы работы с распределенным приложениием. С точки зрения декомпозиции никакой разницы.

профит микросервисов не в декомпозиции а в независимом деплое (что бы делать независимое рассписание деливери разных команд). Это больше про управление и скейлинг людей. И да, этот подход пиздец чувствителен к кривой декомпозиции

просто в монолитах можно делать все то же самое но проще. И пока у тебя нет необходимости делать абсолютно независимую деливери продукта по разным людям - нет нужны в микросервисах.

а если у тебя с декомпозицией все хорошо - переход на микросервисы дело не хитрое

Nikita?️‍?
24.09.2018
14:53:57
Задача: отсортируйте список чисел. Американский программист: q []=[]; q (x:xs) = q [y | y <- xs, y < x] ++ [x] ++ q [y | y <- xs, y >= x] Русский программист: #включить <conio.h> общедоступная функция Главная(пусто): пусто; переменная результат: список[0..9000] типа число; начало ...

Bohdan
24.09.2018
14:54:43
а что, если я скажу тебе, что здесь не только "русские" сидят?

Bohdan
24.09.2018
14:55:43
чет прям второй заход пошел

аж хочу посмотреть, что еще выдаст

Aleh
24.09.2018
14:56:16
еще невалидного хаскеля в тред

Bohdan
24.09.2018
14:56:33
я вон мало в своей жизни невалидного хаскеля видел

Google
Sergey
24.09.2018
15:14:45
нелегкие - дарт?

не, я с ангуляром уже года полтора не работал. сча реакты

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