Просто о сложном - Domain Driven Design [ru] / Дмитрий Науменко

  Рет қаралды 51,767

fwdays

fwdays

Күн бұрын

Пікірлер
@igreezly
@igreezly 3 жыл бұрын
Дмитрий, спасибо! Очень доступно, ёмко, содержательно, с примерами и без воды. Лучшее выступление по теме DDD!
@ЕвгенийАлексеенко-д4щ
@ЕвгенийАлексеенко-д4щ 3 жыл бұрын
Согласен
@amirjaminov9353
@amirjaminov9353 Жыл бұрын
Я думаю этот доклад надо рекомендовать всем, кто начинает знакомиться с ДДД. Прям максимально просто и ничего лишнего
@88billizzard88
@88billizzard88 4 жыл бұрын
Это просто гениально, очень классно, просто все по полочкам
@амфибий
@амфибий 2 жыл бұрын
Единственный толковый доклад по DDD во всей трубе
@makkapoya
@makkapoya 2 жыл бұрын
Отличный доклад! Спасибо за труд
@follower90
@follower90 5 жыл бұрын
Доклад отличный. Уже с десяток пересмотрел по данной теме. Этот прямо вдохновил и открыл глаза на некоторые детали. Заслуженный лайк и положительный отзыв. Спасибо!
@nameless_bro1
@nameless_bro1 3 жыл бұрын
Сказочно! Обо всем рассказал доступно и понятно с качественными примерами кода и абстракций. Большое спасибо конференции и ведущему!
@Someniatko
@Someniatko 3 жыл бұрын
Потрясающий доклад. Давно пытался познакомиться с DDD, но никак всё не связывалось в единую целостную картину. Послушав же Диму, как будто в голове что-то соединилось, и стало кристалльно прозрачным. Особенный респект за объяснение аггрегатов!
@ДмитрийПоздняков-щ6ь
@ДмитрийПоздняков-щ6ь 3 жыл бұрын
отличный доклад. Все по полочкам. Отличительная черта умного человека - умение обьяснить сложные вещи, так, чтобы было понятно всем.
@alexaverkiyev9099
@alexaverkiyev9099 3 жыл бұрын
очень круто рассказал! Актуально в конце 2021 !!!
@OlegSkalozub
@OlegSkalozub 7 жыл бұрын
Спасибо за хороший доклад, развивайте свой канал, расскрывайте эту тему больше, у Вас хорошо получается
@vesh95
@vesh95 3 жыл бұрын
Да. yii2 дает нам модели, которые легко заполняются даже самыми глубоко вложенными данными, и не хило так умеют валидировать. Тогда получается, что object-value отпадает? А с инфраструктурного уровня легко можно возвращать объекты класса Model? Казалось бы у нас зависимость от фреймворка высовывается, но тут и Sql*Repository в первую очередь мы бы начали реализовывать через фреймворковский Activerecord, а даже если не через него, то в примере описан пример с db-connection от Yii2 (хэлп плиз, шо за?)
@maxyc.webber
@maxyc.webber Жыл бұрын
Доклад хороший. но есть вопросы. AddressDto::fromRequest как бы намекает нам о том, что этот дто должен находиться в слое инфраструктуры, но если он будет в инфраструктуре, то я не имею права прокидывать его в аппликейшен, ибо нарушу направление зависимости. Про аппликейшен было сильно в скольз упомянуто. Я понял так, что это просто прослойка между инфраструктурой и доменом. Но мне показалось что это основной бизнес слой. здесь описывается поведение программы, используя данные из инфраструктуры и домен для обработки
@maxyc.webber
@maxyc.webber Жыл бұрын
наверное следом тот же самый вопрос про диспетчеризацию событий. я из аппликейшена вызываю диспетчер из инфраструктуры. кажется это не верно
@balkrash
@balkrash 7 жыл бұрын
В чем отличие этих двух книг: Domain-Driven Design: Tackling Complexity in the Heart of Software Domain-Driven Design Reference: Definitions and Pattern Summaries? Второй что то типа справочника? И почему нет книги Вернона в рекомендациях?
@S1lverFire
@S1lverFire 7 жыл бұрын
Да, вторая - это конспект первой для быстрого ознакомления. На том же слайде, где рекомендации Эванса, есть ссылка на GitHub. Там в репозитории state-of-the-union есть блок "Recommended reading", где кроме Вернона есть еще много чтива :)
@ruslanalimbetov376
@ruslanalimbetov376 3 жыл бұрын
Буду локаничным) Круто и достпуно
@alexanderkozlikhin
@alexanderkozlikhin 2 жыл бұрын
Хороший доклад!Но вот опять, почему все постоянно цену называют стоимостью? А ведь на слайде правильно написано "price: float", при чем тут стоимость?
@OloloStalin
@OloloStalin 7 жыл бұрын
Спасибо за доклад. Тема интересная и расписана довольно понятно. Особый плюс докладчику за подачу и дикцию - умеет выступать. Так держать! ПС: Уважаемый автор, а есть ли у вас еще доклады по другим темам? Было бы интересно ознакомиться
@websoda
@websoda 4 жыл бұрын
кайф, спасибо
@АлександрКубит
@АлександрКубит 5 жыл бұрын
Вопрос только один, как это он так хитро объявил dto объект на инфраструктурном слое, если интерфейс сервиса объявлен на уровне домена, это значит что и о dto объекте должно быть известно на уровне домена.
@S1lverFire
@S1lverFire 4 жыл бұрын
Упущение, однако ¯\_(ツ)_/¯ Спасибо, что обратили внимание)
@ejoys3
@ejoys3 3 жыл бұрын
@@S1lverFire было б круто где-нить глянуть более полный код данного примера для понимания всех архитектурных нюансов. Доклад огонь.
@x0r1k
@x0r1k 2 жыл бұрын
Никто не мешает DTO создать на нижнем уровне, например: class User { function update(UserUpdateDTO $dto) { ... } }
@andreykulikovsky817
@andreykulikovsky817 7 жыл бұрын
Отличный доклад, но почему нет упоминания про DataMapper, UoW (та же доктрина) для инфраструктурного слоя.
@S1lverFire
@S1lverFire 7 жыл бұрын
Спасибо. Ограничение во времени не даёт возможности раскрыть больше концепций.
@karafunarmenian6312
@karafunarmenian6312 5 жыл бұрын
Здравствуйте спасибо за урок Дмитрий . Такая ситуация у меня. есть юзер и у каждого юзера много счетов. + к этому ничего не привязан к юзеру. тогда юзер энтити или агрегат ? то есть хочу уточнить - должна ли в программе минимум 1 агрегат быть(если не явный тогда энтити берем вместо агрегата). спасибо заранее .
@S1lverFire
@S1lverFire 5 жыл бұрын
Здравствуйте. Если у Юзера есть много Счетов то все Счета должны ссылаться на одного и того же Юзера. Поскольку энтити уникален только в пределах агрегата, то для реализации требования из предыдущего предложения, нужно чтобы Юзер был уникален глобально в системе, тогда он становится Aggregate Root'ом. А вообще у вас скорее всего есть путаница с границами или языком домена. Словом Юзер обычно называют пользователя приложения, который аутентифицирован, а контексте Счетов уместнее говорить о Покупателе, Клиенте или Контрагенте.
@karafunarmenian6312
@karafunarmenian6312 5 жыл бұрын
@@S1lverFire то есть менять юзер на клиент ? и с агрегатом делать тоже самое ?
@karafunarmenian6312
@karafunarmenian6312 5 жыл бұрын
@@S1lverFire " Если у Юзера есть много Счетов то все Счета должны ссылаться на одного и того же Юзера. " - Я имел ввиду кроме счетов ничего не привязан
@S1lverFire
@S1lverFire 5 жыл бұрын
KaraFun Armenian почитайте про Bounded context. В приложении может быть и Юзер и Клиент, но в разных контекстах они будут иметь разное значение.
@karafunarmenian6312
@karafunarmenian6312 5 жыл бұрын
@@S1lverFire ок. спасибо за советы )
@HEX_CAT
@HEX_CAT Жыл бұрын
❤❤❤
@alexkazimir3835
@alexkazimir3835 6 жыл бұрын
Дмитрий, молодец, приятно и понятно слушать
@NofaceAndrew
@NofaceAndrew 2 жыл бұрын
Здорово конечно, но контексты в DDD это прям очень важно, нельзя рассуждать о моделях, без контекста в котором они работают, иначе это просто превращается в rich domain model. В разных контекстах может даже отличаться единый язык (иметь разные диалекты), разные классы описывающие одну и ту де модель, с разным поведением и по-разному отображающиеся в БД.
@andreyklochok
@andreyklochok 6 жыл бұрын
Отличный доклад, спасибо!
@svetatam
@svetatam Жыл бұрын
Просто о сложном :) чет не просто :)
@davidkarapetyan9904
@davidkarapetyan9904 5 жыл бұрын
Дмитрий здравствтуйте, можно ли иметь Value object который не зависим ?например курс доллара в евро
@S1lverFire
@S1lverFire 5 жыл бұрын
Добрый день, Давид. Не уверен, что правильно понял ваш вопрос. Можете попробовать перефразировать его, пожалуйста?)
@c00p3rok
@c00p3rok 2 жыл бұрын
ах-ах!! сердце!! врача!!! Итем!..
@balkrash
@balkrash 7 жыл бұрын
Да и про анемичную модель ничего непонятно. Т.е., чтобы она не была анемичной, нужно всякую хрень изобретать? Может мне не нужен паттерн состояния?
@S1lverFire
@S1lverFire 7 жыл бұрын
Есть две крайности: стараться получить максимально анемичную модель, разложив всю логику по сервисам; и стараться всеми силами не допустить анемичной модели, избегая создания сервисов. У обоих подходов есть свои евангелисты. Вы можете выбрать любую из крайностей или остановиться посередине - смотря что больше подходит для проекта. Изобретать хрень вам не нужно, её уже давно изобрели, и да, если вам не нужен паттерн State Machine - просто не используйте его ;)
@balkrash
@balkrash 7 жыл бұрын
Спасибо за ответ!
@mirlaniusUMK
@mirlaniusUMK 5 жыл бұрын
очень круто, спасибо за подачу
@ВладимирБ-щ5д
@ВладимирБ-щ5д 5 жыл бұрын
Очень круто, понятно и забавно в конце =)
@scheidegg
@scheidegg 7 жыл бұрын
Спасибо. Пилите еще.
@IlyaPermyakov
@IlyaPermyakov 7 жыл бұрын
Напутано - Appication Service подается как Domain Service. ClientService это Application но никак не Domain.
@EshkinKot1980
@EshkinKot1980 5 жыл бұрын
Смотрел доклад и мучился вопросом, что докладчик делает среди Yii-шников. Какое вообще DDD имеет отношение к Yii, ведь Yii это, скорее, про блоги с котиками а не про enterprise. Доклад хороший, жаль только, что короткий. Однозначно лайк. Очень хотелось бы найти ролики, в которых тема DDD полностью раскрыта и нет отговорок, что вот этот кусочек, это тема отдельного доклада. Но что-то они не ищутся. Видимо все же придется прочитать эти здоровенные книги(
@S1lverFire
@S1lverFire 4 жыл бұрын
Спасибо за отзыв. В один доклад без оговорок впихнуть весь DDD не получится. Посмотрите канал DDD Europe - у них там пару суток контента
@bobslave7063
@bobslave7063 6 жыл бұрын
Спасибо, отличный доклад.
@dmitryocheretko703
@dmitryocheretko703 4 жыл бұрын
Спасибо. Крайне полезно
@ИльяСмирнов-л4ц
@ИльяСмирнов-л4ц 6 жыл бұрын
А чем это отличается от kzbin.info/www/bejne/qJvXk3avlsh9l9U ?
@РоманСафин-т9ю
@РоманСафин-т9ю 5 жыл бұрын
Думал что все неплохо в докладе, пока речь не пошла о трейтах
@S1lverFire
@S1lverFire 4 жыл бұрын
Почему нет? Как бы сделали вы? Трейт - неплохой способ получить стандартную реализацию без создания древа наследования и без явной композиции, которая потребует инициализации других объектов. В Kotlin есть прикольная возможность - называется Delegate class, но в PHP такого инструмента нет.
@mikeshapovalov2459
@mikeshapovalov2459 4 жыл бұрын
​@@S1lverFire трейт создает жесткую зависимость домена от инфраструктуры, в большинстве случаев это допустимый компромисс, но в идеальном случае вместо трейта в агрегат нужно внедрить зависимость которая будет имплементировать интерфейс отправки событий объявленный доменом.
@Ya-GalinaVyacheslavovna
@Ya-GalinaVyacheslavovna 3 жыл бұрын
Годный доклад, но мозги плавит немного )) ну, патамушта ООП-дизайн всегда это делает)))
@AndriiKuftachov
@AndriiKuftachov 6 жыл бұрын
А в чем проблема с валидацией? Каждый слой делает свою валидацию. Доклад классный, но опять впечатление, что на конференциях по PHP рассказывают то, что в Java уже Junior должен знать.
@ThisDaveAndThatJohn
@ThisDaveAndThatJohn 5 жыл бұрын
1. PHP не Java 2. В Java ничего не заработает, хоть один класс-да должен быть, поэтому не стоит удивляться что джависты продвинутей в ООП.
@Morrado
@Morrado 5 жыл бұрын
Спорный это вопрос, имхо. Когда в Java юзали EJB (и пухли с него), я не понимал, почему нельзя нормальный фреймворк запилить. В PHP и в C# уже юзались во всю MVC фреймворки, была интуитивно понятная архитектура. Spring MVC убил EJB(что радует), но ведь так писать можно было и без Spring. Про DDD же много говорят последние несколько лет, но юзает его в Java даже не половина(а книге Эванса уже 15 лет испольнилось). Пэпхэпэшники в этом плане молодцы, и ООП уже у них на одном из первых мест и подходы всякие внедряют быстро. IoC контейнер уже даже есть(для меня это новость). По поводу джунов, как по мне - джун должен знать сам язык, ООП, массивы, структуры данных, алгоритмы, возможно паттерны и ещё по-мелочи. А подходы, архитектурные решения, технологии и т.д. - это все в качестве плюсов. Если конечно компания не планирует собрать команду из одних джунов, чтоб они запилили крутой продукт со старта за пару месяцев.
@MrFrimko
@MrFrimko 7 жыл бұрын
такие бы штуки писать на джаве/шарпе писать лишние классы что бы передавать параметры на пхп, если проект большой то чет жирно получится
@rusrb
@rusrb 5 жыл бұрын
сначала кажется что жирно, но когда проект вырастет, будет не жирнее и менее запутанно кучи вермишелевого кода (все по полкам)
@5821262
@5821262 7 жыл бұрын
супер
@ВиталийПугач-к8ю
@ВиталийПугач-к8ю 7 жыл бұрын
Спасибо
@РоманСохарев-ю2ф
@РоманСохарев-ю2ф 7 жыл бұрын
Драйвн, драйвн, плеать )
@S1lverFire
@S1lverFire 7 жыл бұрын
Не-а :) dictionary.cambridge.org/ru/словарь/английский/driven
@РоманСохарев-ю2ф
@РоманСохарев-ю2ф 6 жыл бұрын
ох-ть. Тот самый момент, когда всю жизнь думал, что спрайт зелёный.
@ICSVortex-DCS
@ICSVortex-DCS 3 жыл бұрын
Бесполезное видео как по мне. Ничего не понял.
@SVDDEN
@SVDDEN 7 жыл бұрын
Дривен)))0
@ThisDaveAndThatJohn
@ThisDaveAndThatJohn 5 жыл бұрын
ну так и правильно
Domain Driven Design - просто о сложном. Дмитрий Науменко.
58:32
Владимир Хориков - Domain-driven design: Cамое важное
1:13:59
DotNext — конференция для .NET‑разработчиков
Рет қаралды 57 М.
It’s all not real
00:15
V.A. show / Магика
Рет қаралды 20 МЛН
黑天使只对C罗有感觉#short #angel #clown
00:39
Super Beauty team
Рет қаралды 36 МЛН
Сергей Протько "Солидный код"
29:23
Ануар Нурмаканов - Event Sourcing и CQRS на конкретном примере
1:01:21
JPoint, Joker и JUG ru — Java-конференции
Рет қаралды 53 М.
Алексей Мерсон - Domain-driven design: рецепт для прагматика
58:57
DotNext — конференция для .NET‑разработчиков
Рет қаралды 62 М.
Артём Антоненко «Domain Driven Design» | CODEiD (11.08.2018)
1:12:50
Пилот о катастрофе в Актау: причины трагедии
23:33
Многоликий DDD - Сергей Баранов
1:19:18
Конференция ArchDays
Рет қаралды 19 М.