Как не провалиться на собеседовании отвечая про DDD | Domain Driven Design | Jetbulb

  Рет қаралды 19,900

Jetbulb

Jetbulb

Күн бұрын

В последнее время на собеседованиях очень часто спрашивают про Domain Driven Design. Эти вопросы задаются на различных уровнях, от мала до велика, от Junior до Senior.
Сегодня на примере реального интервью рассмотрим вопросы про DDD, что важно не упустить отвечая на них, и как в целом отвечать на такие вопросы.
Программа:
00:00 Введение
04:26 Мотивация применения DDD
07:51 Про понимание своего домена
10:41 Про домен область
13:05 Domain и Bounded Context
16:24 Сущность для отражения бизнес процессов
20:59 Строительный элемент сущность
25:11 Про кластер сущностей и коммуникацию
28:19 Выводы
Получи реальный опыт решения коммерческих задач в Agile команде
до 6 человек iprody.com/
Наш тренинг-центр:
iprody.com/
Мы в социальных сетях:
t.me/jetbulb

Пікірлер: 55
@xmahz
@xmahz Жыл бұрын
Столько принципов, а по итогу работаешь с Легаси кодом в монолите, с постоянными самоповторами 🫠
@Jetbulb
@Jetbulb Жыл бұрын
🤣 жЫза
@khvastov.maksym
@khvastov.maksym Жыл бұрын
Всё так. И смотришь на этот "большой красивый мир микросервисов" как через щель в заборе :( С другой стороны - для того мы и развиваемся, чтобы иметь возможность выбирать проекты, на которых нам бы хотелось работать. Правда сейчас ситуация на рынке не фонтан, выбирать не приходится.
@xmahz
@xmahz Жыл бұрын
@@khvastov.maksym я вот, сижу выбираю и норм)
@khvastov.maksym
@khvastov.maksym Жыл бұрын
@@xmahz Я тоже выбираю, и даже по собесам хожу, но команды сейчас балованые, имхо)
@xmahz
@xmahz Жыл бұрын
@@khvastov.maksym Они всегда такие мне кажется)
@user-bv3lb1ui6d
@user-bv3lb1ui6d Жыл бұрын
Огонь, спасибо. Очень клёво, конечно каждый разработчик должен знать.
@olegbaranich
@olegbaranich Жыл бұрын
Спасибо за замечательный контент! У меня 4 года опыта и почти каждое собеседование начинается с вопросов архитектуры :) очень полезное видео
@alextret6787
@alextret6787 Жыл бұрын
Отличное видео и канал. Спасибо!
@baxiskerimzade2690
@baxiskerimzade2690 Жыл бұрын
Спасибо!)
@user-vi2fp6dl7b
@user-vi2fp6dl7b 6 ай бұрын
Большое спасибо!
@egorzdioruc7831
@egorzdioruc7831 9 ай бұрын
Очень круто, спасибо! Пока что это самый лучший урок по DDD из тех, что я видел Очень хотелось бы, что бы ты также упоминул о уровнях DDD и также о других модулях приложения, таких как Service, Factory, Store, Repository и т.д. Но и так в целом у тебя получился весьма весомый и хорошо спроектированный урок Кайф)
@oldzas
@oldzas 8 ай бұрын
Понравилась подача, подписался, лайк
@IKar-ru
@IKar-ru Жыл бұрын
Постоянно слежу за вашими выпусками, официально уровень не джун, но, признаюсь, все равно периодически открывается либо то, о чем забыл, либо какие-то нюансы о которых не знал. Смотрю ваши видео на пару с документацией: чуть что сразу лезу в детали. Макс, очень бы хотелось разборы каких-то интересных или может просто распространенных кейсов/задач с использованием тех или иных фреймворков или паттернов проектирования. Разнообразного опыта у вас много, поделитесь практикой)
@Jetbulb
@Jetbulb Жыл бұрын
Вот уже начали пробовать делать видео с разбором задач с собеседований)) Как раз должно быть следующее на подобную тематику
@borisn879
@borisn879 Жыл бұрын
Еще: CQRS, UseCase\Interactor, Domain events, domain service, транзакционная цепочка агрегатов, потоки между агрегатами, субдоменами, трилема, признаки чистоты и полноты модели. Вынесение части логики в app, чтобы сохранить чистоту домена и холивар на этот счет. Связь чистой кричащей архитектуры дяди Боба, гексагонал и ДДД. Типичные паттерны в ДДД.
@user-bn6kb5vg1q
@user-bn6kb5vg1q Жыл бұрын
Я так понимаю это уже более продвинутые топики) Можешь поделиться где ты о них читал, а то некоторые термины, по типу транзакционной цепочки агрегатов ни в книге Эванса, ни в интернете не нашел, а любопытно.
@borisn879
@borisn879 Жыл бұрын
@@user-bn6kb5vg1q Два типа согласованности: транзакционная согласованность агрегата и итоговая согласованность. Итоговая согласованность может потребовать провести цепь транзакций по нескольким агрегатам. Как я понимаю это, изменение состояния в Счетах по событию Оплата запускает цепь транзакций по другим агрегатам (в другие ограниченные контексты). И тут проблема, как это реализовать (события домена, например, сага..) и как компенсировать в случае сбоев. А сбой может быть технический или же бизнес-процессный, например, доставка с текущего момента не может отвезти 6м стрелу, т.к. автопарк изменился. Но в итоге, каждый агрегат должен сохранить consistency и инвариант.
@ksyaneone
@ksyaneone 9 ай бұрын
Смотрел доклад какого то типа, ничего не понял. У тебя очень доступно вышло объяснить. Спасибо
@serious_psychologist
@serious_psychologist Жыл бұрын
в принципе это такой фильтр, как и СОЛИД например, очень хорошо и понятно рассказал.
@kazbowski
@kazbowski Жыл бұрын
Привет, спасибо за такой информативный видос :) Скажи пожалуйста, ты когда ходил по собесам, тебя спрашивали такие заезженные вопросы про Java core?
@Jetbulb
@Jetbulb Жыл бұрын
Привет )) Ох, чего только не спрашивают. Бывают крутые собеседования, а бывают скучные и бессмысленные
@JohnJohn31595
@JohnJohn31595 11 ай бұрын
thanks
@borisn879
@borisn879 Жыл бұрын
ДДД - это таки моделирование процессов бизнеса, бизнес-сущности как база. Бизнес платит за приятные Event: order has been paid, State:delivered. Агрегат определяется бизнес-транзакцией, т.е. процессом. BC - на основе ценности, очевидности и потока событий. Цель бизнеса - что-то менять. Цель программы - тоже что-то менять. Поэтому event, state, side-effect выходят на первый план.
@borisn879
@borisn879 Жыл бұрын
15:08 интересны связи между BC, есть ли bidirect потоки, насколько высок coupling. Как конкретно реализованы User & Client, если они мапятся в одну сущность БД, например.
@jellyfish6265
@jellyfish6265 8 ай бұрын
чем больше узнаю о ддд, тем больше понимаю, что эта муть нафиг не нужна
@borisn879
@borisn879 Жыл бұрын
17:24 entity Order имеет ambient context из-за времени. Т.е. получается impure. Как передать получение Времени? Как сервис? Как plain value? 20:31 entity Order.client - вопрос, нужна ли сущность клиента? Order не нужно фото клиента, его имя и хобби. Получается, что Client в данном BoundedContext может иметь лишь Id.
@borisn879
@borisn879 Жыл бұрын
Вопрос про VO. В домене используется VO\IdInterface, требующий метод isEqualsTo. В infrastructure есть реализация этого интерфейса, например, UUIDv7. Каждая реализация имеет свой метод isEqualsTo, понятно, что для UUIDv7 и UUIDv4 способы разные. Причем, реализации имеют зависимость от vendor amsey\uuid, который обеспечивает проверку isEqualsTo. Domain model Entity используют VO\IdInterface, куда мапится infrastructure\UUIDv7. Например, SomeRepository->nextID возвращает VO\IdInterface в виде infrastructure\UUIDv7. Вопрос - это норма? Тут видна не-чистота Домена через VO\IdInterface.
@vitaliiboichuk8287
@vitaliiboichuk8287 Жыл бұрын
Дуже важлива інформація! Було б чудово, якщо б ви ще розглянули забезпечення транзакційності в скоупі декількох мікросервісів. Дуже дякую за вашу працю!
@Jetbulb
@Jetbulb Жыл бұрын
Гарна пропозиція. Записав в пул тем для відео. Респект 👍
@borisn879
@borisn879 Жыл бұрын
26:41 стоит ли делать такой большой Aggregate? Factory для него будет объемный. Этот Aggregate имеет одну транзакционную границу? Бизнес-логика должна быть вшита в Aggregate или injection\delegate и куда? А если бизнес-логика в стиле "не более трех за последний год", то race condition и concurency проблема, транзакция...
@Alexander-dg5id
@Alexander-dg5id 3 ай бұрын
Про то, что мы вынуждены всегда доставать агрегат целиком чтобы изменить одну его запчасть - не правда. Иногда это даже вредно. Мы запросто можем достать одну сущность из всего агрегата, и модифицировать ее. Важно только, чтобы результатом работы не стало нарушение консистентности агрегата. Но работать точечно - можно, и часто - нужно.
@lWeRl
@lWeRl Жыл бұрын
На примере разбора ValueObject. Как у нас в базе лежит price? Если оба поля по итогу лежат в order - то зачем ее отделять. Если поля вынесены в отдельную таблицу, то у них появляется Id и они превращаются в Entity. А если они в одной таблице, то мы пишем на Order gerPrice который возвращает новый объект типа price?
@borisn879
@borisn879 Жыл бұрын
Я не спец, но PriceValueObject хранит фракцию и валюту. Тут не может быть идентификатора. Заказ хранит итоговую стоимость как фракция и валюта. В домене есть понятие Price (в виде PriceValueObject), а как оно будет мапиться туда и обратно - дело десятое. Домен не знает, что у вас БД. Ему нужны лишь понятия, заполненные данными. Домен не зависит от инфраструктуры.
@user-us5zb1gs3p
@user-us5zb1gs3p 11 ай бұрын
Для понимания вашего примера - это может быть массив или иная структура в таблице order
@inzagher
@inzagher Жыл бұрын
DDD уже на джуна спрашивают?) Видео пока не смотрел, тема определенно, интересная и важная.
@xmahz
@xmahz Жыл бұрын
Это бесполезно, джун тебе не назовет зачем нужен DDD, только если не заучит теорию)
@Jetbulb
@Jetbulb Жыл бұрын
На джуна конечно же нет. Но сам понимаешь, все зависит от собеседующего и его желаний. Как по мне, DDD для middle+
@selub1058
@selub1058 22 күн бұрын
Дадада...микросервис на базе express задеплоинного монолитом в AWS Lambda (типа для того, чтобы быстро было и по минималке использовать нативный API Gateway....а по факту потому что в команде нет человека с соответсвующей квалификацией )
@margaritaiazyvanova4541
@margaritaiazyvanova4541 5 ай бұрын
Спасибі очень полезно и спасибо за поддержку💛💙
@user-on1cd6cr7p
@user-on1cd6cr7p 3 ай бұрын
Немного разбираюсь в DDD, могу сказать, что у ведущего приятная речь, но объясняет на четверочку.
@Abdul-hy4cy
@Abdul-hy4cy Жыл бұрын
16:50 - всё видео звучит очень абстрактно
@halalcapital
@halalcapital Жыл бұрын
Макс, что думаешь о таком подходе к собеседованиям? kzfaq.info/get/bejne/ibOJpph0sKnPaYE.html Мне кажется интересный подход, может проведешь собес в таком стиле?)
@Jetbulb
@Jetbulb Жыл бұрын
Посмотрел))) Ничего интересного не нашел. Если честно. Ощущение, что просто хайпанули на интересной теме. Идея обновленных подоходны к интервью классная, но как-то неконструктивно получилось. Потому я Евгению не верю 🤨 Ощущение, что под копирку рассказывает, а не то что в ИТ сегодня происходит. А так, это его субъективное мнение. В итоге рынок показывает, что работает, а что нет. Легко сказать: «Весь мир не используется мою крутую идею». Абсолютно другое дело, донести свою мысль в мир и сделать ее живой. Ну а другое, не стоит путать попытку найти фундаментального инженера с некомпетентностью некоторых случаев. Далеко не всегда интервью сливается в холодную теорию. Все зависит от ситуации. Как-то так 🤓
@halalcapital
@halalcapital Жыл бұрын
@@Jetbulb истина где то рядом)
@madcalm2024
@madcalm2024 Жыл бұрын
хм... про язык написания техзаданий... чтобы заказчики тоже шевелили извилинами и не перекладывали это на программистов
@Jetbulb
@Jetbulb Жыл бұрын
а что делать когда заказчик и есть программист, но извилины не извилятся? )))) З.Ы. Риторический вопрос
@alevadnaya
@alevadnaya Жыл бұрын
Этот аспект вообще плохо понимаем всеми.
@borisn879
@borisn879 Жыл бұрын
Из-за этого холивары и "мой ДДД лучше твоего". Чем выше абстракция, тем больше вариантов реализации.
@dsalodki
@dsalodki 7 ай бұрын
Можно было гораздо короче
@maxfun7978
@maxfun7978 9 ай бұрын
Ну очень много лишнего текста.
Domain Driven Design - просто о сложном. Дмитрий Науменко.
58:32
БОЛЬШОЙ ПЕТУШОК #shorts
00:21
Паша Осадчий
Рет қаралды 9 МЛН
Русалка
01:00
История одного вокалиста
Рет қаралды 4,7 МЛН
Became invisible for one day!  #funny #wednesday #memes
00:25
Watch Me
Рет қаралды 54 МЛН
Was ist im Eis versteckt? 🧊 Coole Winter-Gadgets von Amazon
00:37
SMOL German
Рет қаралды 36 МЛН
Владимир Хориков - Domain-driven design: Cамое важное
1:13:59
DotNext — конференция для .NET‑разработчиков
Рет қаралды 50 М.
3 способа попасть в IT с НУЛЯ
8:35
Артём Ногин | IT для всех
Рет қаралды 1,1 М.
Domain Driven Design: What You Need To Know
8:42
Alex Hyett
Рет қаралды 103 М.
БОЛЬШОЙ ПЕТУШОК #shorts
00:21
Паша Осадчий
Рет қаралды 9 МЛН